NonSoft

WEBページのクッキーの受信と送信のサンプル(C#.NET)


 サンプル(ソース/コード)
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;
            }
        }
    }
}