プロが教えるわが家の防犯対策術!

HttpWebRequestとHttpWebResponseクラスを使って、ユーザーログインが必要なページからHTMLを受信したいのですが、
ブラウザで手動でログインした時に受け取ったTemporary Internet FilesフォルダにあるCookieを使いたいのですが、
この方法をお教え頂けないでしょうか。
HttpWebRequestでIDやPASSを送信してCookieを受け取ることは出来たのですが、
その方法だとブラウザのログイン状態が無効になってしまうので、
すでにあるCookieを使いたいです。

よろしくお願いいたします。

A 回答 (1件)

> Temporary Internet FilesフォルダにあるCookie



というよりは %HOMEPATH%\Cookies にあるのではないでしょうか?
System.Environment.GetFolderPath(Environment.SpecialFolder.Cookies)
# ファイル名は *[1].txt とか *[2].txt とか微妙なのですが。

しかし、このファイル自体を探して読み込むのはセキュリティ的にどうなのかという疑問があります。
(IE などは管理データベースがあるので良いのですが)

それ用の API を用いるか、自前のソフトでログイン情報を送信してそこで得られた Cookie を
ファイルに保存しておくのが筋なんだと思われますが?

これらの URL に記載された例をお読みになれば自力で作れませんか?

設定され、 WinInet API を使用している URL については、 Cookie を取得する方法方法には
http://support.microsoft.com/kb/196062/ja
※ マイクロソフトの自動翻訳そのままなので気にしないでください。

Managing Cookies (Windows)
http://msdn2.microsoft.com/en-us/library/aa38532 …

上記の例でも下記に記述した移植例でも使ってませんが、API でエラー(API の戻り値が失敗の値)と
なった時は必要に応じて GetLastError 調べたほうがよろしいかと思います。

' No more data is available.
Const ERROR_NO_MORE_ITEMS = 259
' The data area passed to a system call is too small.
Const ERROR_INSUFFICIENT_BUFFER = 122

# この例ではバッファを多く取ったのでバッファが足りないというエラーは出ないとは思いますが。

-------------------------------------------
Imports System.Text

Private Declare Function InternetSetCookie Lib "wininet.dll" _
  Alias "InternetSetCookieA" (ByVal lpszUrlName As String, _
  ByVal lpszCookieName As String, ByVal lpszCookieData As String) As Boolean

Private Declare Function InternetGetCookie Lib "wininet.dll" _
  Alias "InternetGetCookieA" (ByVal lpszUrlName As String, _
  ByVal lpszCookieName As String, ByVal lpszCookieData As StringBuilder, _
 ByRef lpdwSize As Long) As Boolean

Private Function getCookie(ByVal szUrlName As String) As String
 Dim sCookieVal As New StringBuilder(2048)
 Dim lpLength As Long
 Dim bRet As Boolean
 lpLength = sCookieVal.Capacity
 bRet = InternetGetCookie(szUrlName, _
  vbNull, sCookieVal, lpLength)
 If bRet = True Then Return sCookieVal.ToString
 Return ""
End Function

Private Function setCookie(ByVal szUrlName As String, ByVal szCookieName As String, _
   ByVal szCookieData As String) As Boolean
  Return InternetSetCookie(szUrlName, _
   szCookieName, szCookieData)
End Function

----------------------------------------------

動作確認例
setCookie("http://xxxx.xxx/", "Test", "TestCookie; expires = Sat,31-Dec-2011 00:00:00 GMT")

MsgBox(getCookie("http://xxxx.xxx/"))
MsgBox(getCookie("http://update.microsoft.com/"))
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!