HttpWebRequestによる軽易なHTTPデータ受信 (C#)(F#)
System.Net.WebRequestを利用すると、軽易にHTTPでデータを取得できます。
サンプルでは、HTTPリクエストと同レスポンスのヘッダを列挙表示しています。
受信したデータの本体を取得する場合はHttpWebResponsのGetResponseStream()でストリームを生成しこれを読み取ることになりますが、この際、適切なエンコードが必要になります。
エンコードの種類は、HttpWebResponsのCharacterSetプロパティに設定されているはずですが、これが、正確でない場合があります。うまく取得できなかった場合は、受信データ(HTML)本体の中を開いてヘッダなどを解釈する必要があるかも知れません。
C#サンプル
using System; using System.Net; namespace Examlpe { class Program { static void Main(string[] args) { //HTTPリクエスト var req = HttpWebRequest.Create("http://www.google.co.jp/"); req.Timeout = 15000;//タイムアウト(15秒) //HTPレスポンス var res = (HttpWebResponse)req.GetResponse(); //ヘッダ取得 Console.WriteLine(""); Console.WriteLine("[SEND]"); var h = req.Headers; for (int i = 0; i < h.Count;i++ ) { Console.WriteLine("{0}: {1}", h.GetKey(i),h[i]); } //ヘッダ取得 Console.WriteLine(""); Console.WriteLine("[RECV]"); h = res.Headers; for (int i = 0; i < h.Count; i++) { Console.WriteLine("{0}: {1}", h.GetKey(i), h[i]); } Console.WriteLine(); Console.WriteLine("何かのキーを押してください。"); Console.ReadKey(); } } }
F#サンプル
open System open System.Net //ヘッダ取得 let getHeaders (h:WebHeaderCollection) = [0..h.Count-1] |>Seq.map(fun i-> h.GetKey(i),h.[i]) //HTTPリクエスト let req = HttpWebRequest.Create("http://www.google.co.jp/") req.Timeout <- 15000 //タイムアウト(15秒) //HTPレスポンス let res = req.GetResponse():?>HttpWebResponse printfn "" printfn "[SEND]" getHeaders(req.Headers)|>Seq.iter(fun(k,v)->printfn "%s: %s" k v) printfn "" printfn "[RECV]" getHeaders(res.Headers)|>Seq.iter(fun(k,v)->printfn "%s: %s" k v) printfn "" printfn "何かのキーを押してください。" Console.ReadKey() |> ignore