ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: VB.net : HttpWebRequest と HttpWebResponse でクッキーのやり取りを CookieContainer で行うには
名前: lightbox
処理選択
パスワード

件名 VB.net : HttpWebRequest と HttpWebResponse でクッキーのやり取りを CookieContainer で行うには
名前 lightbox
コメント
@DIV
@C:red(サーバーからの Set-Cookie が、パス無して指定されていない場合、クッキーの対象が
全てのパスになってしまうので、同じ php に対してアクセスする場合は良いのですが、同じデ
ィレクトリ内で別の php にアクセスした場合にクッキーが引き継がれないので、プログラムで
対応する必要があります)
@END

@HTML
<b class=sttl>関連する記事</b>

<a href="http://winofsql.jp/VA003334/sh_web100618110711.htm" target="_blank">VBScript/PHP クッキーデータが自動的に受け渡しされる事のテスト</a>
@HEND

@DIV
Module MyModule

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

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

	@C:green(' ****************************************************************
	' 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)

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

	@C:green(' サーバーからのクッキーを保存させる)
	req.CookieContainer = cc

	req.Method = "GET"

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

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

	@C:green(' ****************************************************************
	' 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()


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


End Sub

End Module
@END