C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: WebClientでzipファイルDL時のCookie設定


(過去ログ 113 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■66894 / inTopicNo.1)  WebClientでzipファイルDL時のCookie設定
  
□投稿者/ ミーア (1回)-(2013/06/03(Mon) 15:46:37)

分類:[VB.NET/VB2005 以降] 

言語:VB2008・2010

教えてください。
WebBrowserに表示されたHTMLページ上にリンクされているzipファイルを、WebClientでダウンロードしたいのですが、
WebClientに直接zipファイルのURLを与えても、Cookieが不正とのことでうまくダウンロードができません。
(ダウンロードされるファイルは、Cookieを有効にしてください的なメッセージが書かれたHTMLとなります。)

それではHttpWebRequestを利用して、Cookieを付与してダウンロードすればいいのではないか、と思ったのですが、
WebBrowserに設定されているCookie情報を取得するにはどうすればいいのでしょうか?

よろしくお願い申し上げます。
引用返信 編集キー/
■66895 / inTopicNo.2)  Re[1]: WebClientでzipファイルDL時のCookie設定
□投稿者/ pang2 (25回)-(2013/06/03(Mon) 15:58:50)

http://bbs.wankuma.com/index.cgi?mode=al2&namber=60603&KLOG=101
引用返信 編集キー/
■66905 / inTopicNo.3)  Re[2]: WebClientでzipファイルDL時のCookie設定
□投稿者/ ミーア (2回)-(2013/06/04(Tue) 14:25:02)
No66895 (pang2 さん) に返信
> つ
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=60603&KLOG=101

pang2 さま、教えて頂いたサイトでうまくいきました。ありがとうございました。
具体的には、ここに書いてあったWebClientを継承したCookieAwareWebClientクラスをアレンジし、
以下のようにCookieContainerのプロパティを用意して、ここにクッキーを含めたクッキーコンテナを
セットすることによりダウンロードができました。

Imports System.Net

Public Class CookieAwareWebClient
    Inherits WebClient
    Private m_container As CookieContainer

    Public Property CookieContainer() As CookieContainer
        Get
            Return m_container
        End Get
        Set(ByVal value As CookieContainer)
            m_container = value
        End Set
    End Property

    Protected Overrides Function GetWebRequest(ByVal address As Uri) As WebRequest
        Dim webRequest As WebRequest = MyBase.GetWebRequest(address)

        If TypeOf webRequest Is HttpWebRequest Then
            Dim httpWebRequest As HttpWebRequest = DirectCast(webRequest, HttpWebRequest)
            httpWebRequest.CookieContainer = m_container
        End If

        Return webRequest
    End Function
End Class

ただし、このサイトに書いてあった

> CookieContainer.SetCookies(uri, webBrowser1.Document.Cookie)

ではなぜかCookieがうまく渡せなかったので、webBrowser1.Document.Cookieの内容を分割したものから
CookieCollectionを作成してCookieContainerを用意しました。

とりあえず本件は解決しました。ありがとうございました。

解決済み
引用返信 編集キー/
■66910 / inTopicNo.4)  Re[3]: WebClientでzipファイルDL時のCookie設定
□投稿者/ ミーア (3回)-(2013/06/05(Wed) 14:54:43)
>>CookieContainer.SetCookies(uri, webBrowser1.Document.Cookie)
> 
> ではなぜかCookieがうまく渡せなかったので、webBrowser1.Document.Cookieの内容を分割したものから
> CookieCollectionを作成してCookieContainerを用意しました。

webBrowser1.Document.Cookieの内容を確認したところ、各Cookieの組み合わせがセミコロン";"で区切られていました。
Cookieのヘッダ情報では、各Cookieの区切りはセミコロンではなくカンマ","だったと思い、試しに、以下のコードのように
セミコロンをカンマに置き換えたものをCookieContainer.SetCookiesに渡したところ、うまくCookieをセットすることができました。


Dim url As String = 「PDFのURL」
Dim cc As New CookieContainer
cc.SetCookies(New Uri(url), Replace(WebBrowser1.Document.Cookie, ";", ","))
Using wc As New CookieAwareWebClient
    wc.CookieContainer = cc
    wc.DownloadFile(url, 「保存先ファイル名」)
End Using

これで完全解決です。ありがとうございました。

引用返信 編集キー/
■66911 / inTopicNo.5)  Re[4]: WebClientでzipファイルDL時のCookie設定
□投稿者/ ミーア (4回)-(2013/06/05(Wed) 14:55:21)
解決済みにチェックします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -