@ITのサンプルコードの一部修正
@IT:.NET TIPS WebRequest/WebResponseクラスでPOSTメソッドによりデータを送信するには? - C# VB.NET
http://www.atmarkit.co.jp/fdotnet/dotnettips/318webpost/webpost.html
にあるサンプルコードが、googleの仕様変更のため、動作がおかしくなるので、勝手ながら、一部修正しました。
using System; using System.Text; using System.Collections; using System.Web; using System.Net; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Encoding enc = Encoding.UTF8; string input = "私は普通のC#プログラマです。"; string url = "http://translate.google.com/translate_t"; string param = ""; // ポスト・データの作成 Hashtable ht = new Hashtable(); ht["text"] = HttpUtility.UrlEncode(input, enc); ht["langpair"] = "ja|en"; ht["hl"] = "en"; ht["ie"] = "UTF8"; foreach (string k in ht.Keys) { param += String.Format("{0}={1}&", k, ht[k]); } byte[] data = Encoding.ASCII.GetBytes(param); // リクエストの作成 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = data.Length; // ポスト・データの書き込み Stream reqStream = req.GetRequestStream(); reqStream.Write(data, 0, data.Length); reqStream.Close(); // レスポンスの取得と読み込み WebResponse res = req.GetResponse(); Stream resStream = res.GetResponseStream(); StreamReader sr = new StreamReader(resStream, enc); string html = sr.ReadToEnd(); sr.Close(); resStream.Close(); // 必要なデータの切り出し // 結果は「id=result_box dir="ltr">〜</div>」にあるという前提 string startmark = "id=result_box dir=\"ltr\">"; int start = html.IndexOf(startmark) + startmark.Length; int end = html.IndexOf("</div>", start); string result = html.Substring(start, end - start); Console.WriteLine(HttpUtility.HtmlDecode(result)); // 出力:I am the normal C# programmer. } } }