ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
VB.net : HttpWebRequest と HttpWebResponse でクッキーのやり取り
日時: 2010/06/18 21:38
名前: lightbox



Module MyModule

' ********************************************************
' 
' ********************************************************
Sub Main()

	' HttpWebRequest のインスタンス
	' コンストラクタでは無く、Create メソッドを使用する
	Dim req As System.Net.HttpWebRequest = _
	 System.Net.HttpWebRequest.Create("http://localhost/web/test/sv1.php")

	req.Method = "GET"

	' HttpWebResponse のインスタンスを取得[ 送信 ]
	Dim res As System.Net.HttpWebResponse = req.GetResponse()
	' Stream
	Dim resStream As System.IO.Stream = res.GetResponseStream()
	' 全て表示
	Dim sr As New System.IO.StreamReader(resStream)
	Console.WriteLine( sr.ReadToEnd() )
	' Streamを閉じる
	sr.Close()

	' ヘッダー情報の取得
	Dim str As String
	Dim str2 As String()
	Dim strValue As String

	' 次の HttpWebRequestを作成
	req = System.Net.HttpWebRequest.Create("http://localhost/web/test/sv2.php")

	' Set-Cookie を Cookie で送り返す
	For Each str In res.Headers
		str2 = res.Headers.GetValues(str)
		For Each strValue In str2
			Console.WriteLine(str + ": " + strValue )
		Next
		if str = "Set-Cookie" then
			strValue = res.Headers.Get(str)
			strValue = strValue.Replace(",", "; ")
			req.Headers.Add("Cookie", strValue )
		end if
	Next

	' 送信
	res = req.GetResponse()
	' 受信と表示
	resStream = res.GetResponseStream()
	sr = New System.IO.StreamReader(resStream)
	Console.WriteLine(sr.ReadToEnd())
	sr.Close()


End Sub

End Module
メンテナンス

VB.net : HttpWebRequest と HttpWebResponse でクッキーのやり取りを CookieContainer で行うには ( No.1 )
日時: 2010/06/18 21:45
名前: lightbox


日時: 2010/06/18 21:45
名前: lightbox
サーバーからの Set-Cookie が、パス無して指定されていない場合、クッキーの対象が
全てのパスになってしまうので、同じ php に対してアクセスする場合は良いのですが、同じデ
ィレクトリ内で別の php にアクセスした場合にクッキーが引き継がれないので、プログラムで
対応する必要があります
関連する記事 VBScript/PHP クッキーデータが自動的に受け渡しされる事のテスト
Module MyModule

' ********************************************************
' 
' ********************************************************
Sub Main()

	Dim strUrlDir As String = "http://localhost/web/test"

	' ****************************************************************
	' HttpWebRequest のインスタンス
	' コンストラクタでは無く、Create メソッドを使用する
	' ****************************************************************
	Dim strUrl1 As String = "http://localhost/web/test/sv1.php"
	Dim req As System.Net.HttpWebRequest = _
	 CType(System.Net.WebRequest.Create(strUrl1), System.Net.HttpWebRequest)

	' クッキー保存用
	Dim cc As System.Net.CookieContainer = New System.Net.CookieContainer()

	' サーバーからのクッキーを保存させる
	req.CookieContainer = cc

	req.Method = "GET"

	' HttpWebResponse のインスタンスを取得[ 送信 ]
	Dim res As System.Net.HttpWebResponse = req.GetResponse()

	' ****************************************************************
	' 読み出し
	' ****************************************************************
	Dim resStream As System.IO.Stream = res.GetResponseStream()
	Dim sr As New System.IO.StreamReader(resStream)
	Console.WriteLine( sr.ReadToEnd() )
	' StreamReader オブジェクトと、その基になるストリームを閉じる
	sr.Close()

	' ****************************************************************
	' PHP 側の setcookie のデフォルトで、全てのパスに対して
	' 登録されてしまうので、ディレクトリ対象として設定しなおす
	' ****************************************************************
	Dim strHeaders As String = cc.GetCookieHeader(New Uri(strUrl1))
	strHeaders = strHeaders.Replace(";", ",")
	cc.SetCookies( New Uri(strUrlDir), strHeaders )

	Dim strUrl2 As String = "http://localhost/web/test/sv2.php"
	req = CType(System.Net.WebRequest.Create(strUrl2), System.Net.HttpWebRequest)
	req.CookieContainer = cc
	req.Method = "GET"
	res = req.GetResponse()
	resStream = res.GetResponseStream()
	sr = New System.IO.StreamReader(resStream)
	Console.WriteLine( sr.ReadToEnd() )
	sr.Close()


	' ****************************************************************
	' 同一ディレクトリ内のクッキーを継承したい場合はその都度実行
	' ****************************************************************
	strHeaders = cc.GetCookieHeader(New Uri(strUrl2))
	strHeaders = strHeaders.Replace(";", ",")
	cc.SetCookies( New Uri(strUrlDir), strHeaders )


End Sub

End Module
このアーティクルの参照用URLをクリップボードにコピー メンテナンス