@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.
        }
    }
}