|
|||||
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 |