|
|||||
WEBページ取得時に予めクッキーを受信し、 次回以降のWEBページ取得時はクッキー送信するサンプル(C#.NET)です。 クッキーを使用していないWEBページではクッキー送受信の必要がありませんが、 クッキーの送受信をしないとWEBページが取得出来ないサイトも存在します。 たとえば、次のURLはbing(MSN)の検索結果を取得するものですが、 検索順位が201番目以降はクッキーを送信しないと正しいWEBページが取得出来ません。 http://www.bing.com/search?q=abc&filt=all&first=201 そのため、このサンプルでは次のURLで予めクッキーを受信(保存)して置いて、 201番目以降のWEBページを取得する時に、そのクッキーを送信しています。 http://www.bing.com/search?q=abc&filt=all&first=1 ちなみに、クッキーを送信しないで201番目以降のWEBページを取得すると 次のようなテキストがWEBサーバーから返されます。 Ref A: 90813074A10B73C46D42E19F71270241 Ref B: 3408278F6734E558D12C309B1018A320 Ref C: Mon Dec 04 23:59:59 2001 PST C#.NETのクッキー受信と送信のサンプルはこちらです。 WEBページのクッキーの受信と送信のサンプル(VB.NET) その他のWEB関係のサンプルやツールはこちらです。 Googleの検索順位を取得するサンプル(VB.NET) Webページ内の全リンク(URL)を取得するサンプル(VB.NET) WEBやFTPでファイルをダウンロードするサンプル(VB.NET) WEBやFTPでファイルをダウンロードするサンプル(C#.NET) WEB/SEOツール&サンプル その他のサンプル(WEB操作等)はこちらです。 サンプルソース(コード) ★フォーム(Form1.cs) public partial class Form1 : Form { private void button1_Click(object sender, EventArgs e) { // WEBページ受信およびクッキー受信 String web1 = GetCookie_GetWebPage("http://www.bing.com/search?q=abc&filt=all&first=1"); // クッキー送信してWEBページ受信(bingの検索結果201件目からはクッキー送信が必要) String web2 = SetCookie_GetWebPage("http://www.bing.com/search?q=abc&filt=all&first=201"); } // 保存クッキー private System.Net.CookieContainer SaveCookie = new System.Net.CookieContainer(); // WEBページ受信およびクッキー受信 private String GetCookie_GetWebPage(String url) { Byte[] dat = new Byte[0] { }; System.IO.Stream st = null; System.Net.HttpWebResponse wres = null; try { // WEBサーバーへリクエスト送信するURL設定 System.Net.HttpWebRequest wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); // WEBサーバーからクッキーを受信するための設定 wreq.CookieContainer = new System.Net.CookieContainer(); // WEBサーバーへのリクエスト送信およびレスポンス受信(取得) wres = (System.Net.HttpWebResponse)wreq.GetResponse(); // WEBサーバーから受信(取得)したクッキー解析 System.Net.CookieCollection addc = new System.Net.CookieCollection(); System.Net.CookieCollection resc = wreq.CookieContainer.GetCookies(wreq.RequestUri); for (int i = 0; i <= resc.Count - 1; i++) { // クッキー名と値をデバッグ表示 System.Diagnostics.Debug.WriteLine(i + ":" + resc[i].Name + "=" + resc[i].Value); // クッキー名(ORIGMUID)は次回に送信しないため削除 if (resc[i].Name.ToUpper() != "ORIGMUID") { addc.Add(new System.Net.Cookie(resc[i].Name, resc[i].Value)); } } // 次回にWEBサーバーへ送信するクッキーを保存 SaveCookie.Add(wreq.RequestUri, addc); // WEBページ受信 st = wres.GetResponseStream(); Byte[] bytes = new Byte[0] { }; int ttlSiz = 0; int oneSiz; do{ Array.Resize<Byte>(ref bytes, (1024 * 100)); oneSiz = st.Read(bytes, 0, bytes.Length); if (oneSiz > 0) { Array.Resize<Byte>(ref dat, ttlSiz + oneSiz); if (oneSiz != bytes.Length) { Array.Resize<Byte>(ref bytes, oneSiz ); } bytes.CopyTo(dat, ttlSiz); ttlSiz = ttlSiz + oneSiz; } } while (oneSiz > 0); // WEBページを返す return System.Text.Encoding.UTF8.GetString(dat); } catch (Exception ex) { throw ex; } finally { if (st != null) { st.Close(); st = null; } if (wres != null) { wres.Close(); wres = null; } } } // WEBページ受信およびクッキー受信 private String SetCookie_GetWebPage(String url) { Byte[] dat = new Byte[0] { }; System.IO.Stream st = null; System.Net.HttpWebResponse wres = null; try { // WEBサーバーへリクエスト送信するURL設定 System.Net.HttpWebRequest wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); // WEBサーバーへリクエスト送信するクッキー設定 wreq.CookieContainer = new System.Net.CookieContainer(); wreq.CookieContainer.Add(SaveCookie.GetCookies(wreq.RequestUri)); // WEBサーバーへのリクエスト送信およびレスポンス受信(取得) wres = (System.Net.HttpWebResponse)wreq.GetResponse(); // WEBページ受信 st = wres.GetResponseStream(); Byte[] bytes = new Byte[0] { }; int ttlSiz = 0; int oneSiz; do { Array.Resize<Byte>(ref bytes, (1024 * 100)); oneSiz = st.Read(bytes, 0, bytes.Length); if (oneSiz > 0) { Array.Resize<Byte>(ref dat, ttlSiz + oneSiz); if (oneSiz != bytes.Length) { Array.Resize<Byte>(ref bytes, oneSiz); } bytes.CopyTo(dat, ttlSiz); ttlSiz = ttlSiz + oneSiz; } } while (oneSiz > 0); // WEBページを返す return System.Text.Encoding.UTF8.GetString(dat); } catch (Exception ex) { throw ex; } finally { if (st != null) { st.Close(); st = null; } if (wres != null) { wres.Close(); wres = null; } } } } |