NonSoft

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


 サンプル(ソース/コード)
WEBページ取得時に予めクッキーを受信し、
次回以降のWEBページ取得時はクッキー送信するサンプル(VB.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ページのクッキーの受信と送信のサンプル(C#.NET)

その他のWEB関係のサンプルやツールはこちらです。
Googleの検索順位を取得するサンプル(VB.NET)
Webページ内の全リンク(URL)を取得するサンプル(VB.NET)
WEBやFTPでファイルをダウンロードするサンプル(VB.NET)
WEBやFTPでファイルをダウンロードするサンプル(C#.NET)
WEB/SEOツール&サンプル

その他のサンプル(WEB操作等)はこちらです。
サンプルソース(コード)

★フォーム(Form1.vb)
Public Class Form1
    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' WEBページ受信およびクッキー受信
        Dim web1 As String = _
            GetCookie_GetWebPage("http://www.bing.com/search?q=abc&filt=all&first=1")

        ' クッキー送信してWEBページ受信(bingの検索結果201件目からはクッキー送信が必要)
        Dim web2 As String = _
            SetCookie_GetWebPage("http://www.bing.com/search?q=abc&filt=all&first=201")
    End Sub

    ' 保存クッキー
    Private SaveCookie As New System.Net.CookieContainer

    ' WEBページ受信およびクッキー受信
    Private Function GetCookie_GetWebPage(ByVal url As String) As String
        Dim dat As Byte() = New Byte(-1) {}
        Dim st As System.IO.Stream = Nothing
        Dim wres As System.Net.HttpWebResponse = Nothing
        Try

            ' WEBサーバーへリクエスト送信するURL設定
            Dim wreq As System.Net.HttpWebRequest = _
                CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)

            ' WEBサーバーからクッキーを受信するための設定
            wreq.CookieContainer = New System.Net.CookieContainer

            ' WEBサーバーへのリクエスト送信およびレスポンス受信(取得)
            wres = CType(wreq.GetResponse(), System.Net.HttpWebResponse)

            ' WEBサーバーから受信(取得)したクッキー解析
            Dim addc As New System.Net.CookieCollection
            Dim resc As System.Net.CookieCollection = _
                wreq.CookieContainer.GetCookies(wreq.RequestUri)
            For i As Integer = 0 To resc.Count - 1
                ' クッキー名と値をデバッグ表示
                System.Diagnostics.Debug.WriteLine( _
                    i & ":" & resc(i).Name & "=" & resc(i).Value)
                ' クッキー名(ORIGMUID)は次回に送信しないため削除
                If resc(i).Name.ToUpper <> "ORIGMUID" Then
                    addc.Add(New System.Net.Cookie(resc(i).Name, resc(i).Value))
                End If
            Next

            ' 次回にWEBサーバーへ送信するクッキーを保存
            SaveCookie.Add(wreq.RequestUri, addc)

            ' WEBページ受信
            st = wres.GetResponseStream()
            Dim bytes As Byte()
            Dim ttlSiz As Integer = 0
            Dim oneSiz As Integer
            Do
                ReDim bytes((1024 * 100) - 1)
                oneSiz = st.Read(bytes, 0, bytes.Length)
                If oneSiz > 0 Then
                    ReDim Preserve dat(ttlSiz + oneSiz - 1)
                    If oneSiz <> bytes.Length Then
                        ReDim Preserve bytes(oneSiz - 1)
                    End If
                    bytes.CopyTo(dat, ttlSiz)
                    ttlSiz = ttlSiz + oneSiz
                End If
            Loop While (oneSiz > 0)

            ' WEBページを返す
            Return System.Text.Encoding.UTF8.GetString(dat)
        Catch ex As Exception
            Throw ex
        Finally
            If st Is Nothing = False Then
                st.Close()
                st = Nothing
            End If
            If wres Is Nothing = False Then
                wres.Close()
                wres = Nothing
            End If
        End Try
    End Function

    ' クッキー送信してWEBページ受信
    Private Function SetCookie_GetWebPage(ByVal url As String) As String
        Dim dat As Byte() = New Byte(-1) {}
        Dim st As System.IO.Stream = Nothing
        Dim wres As System.Net.HttpWebResponse = Nothing
        Try

            ' WEBサーバーへリクエスト送信するURL設定
            Dim wreq As System.Net.HttpWebRequest = _
                CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)

            ' WEBサーバーへリクエスト送信するクッキー設定
            wreq.CookieContainer = New System.Net.CookieContainer
            wreq.CookieContainer.Add(SaveCookie.GetCookies(wreq.RequestUri))

            ' WEBサーバーへのリクエスト送信およびレスポンス受信(取得)
            wres = CType(wreq.GetResponse(), System.Net.HttpWebResponse)

            ' WEBページ受信
            st = wres.GetResponseStream()
            Dim bytes As Byte()
            Dim ttlSiz As Integer = 0
            Dim oneSiz As Integer
            Do
                ReDim bytes((1024 * 100) - 1)
                oneSiz = st.Read(bytes, 0, bytes.Length)
                If oneSiz > 0 Then
                    ReDim Preserve dat(ttlSiz + oneSiz - 1)
                    If oneSiz <> bytes.Length Then
                        ReDim Preserve bytes(oneSiz - 1)
                    End If
                    bytes.CopyTo(dat, ttlSiz)
                    ttlSiz = ttlSiz + oneSiz
                End If
            Loop While (oneSiz > 0)

            ' WEBページを返す
            Return System.Text.Encoding.UTF8.GetString(dat)
        Catch ex As Exception
            Throw ex
        Finally
            If st Is Nothing = False Then
                st.Close()
                st = Nothing
            End If
            If wres Is Nothing = False Then
                wres.Close()
                wres = Nothing
            End If
        End Try
    End Function
End Class