web-dev-qa-db-ja.com

WebClientにCookieを使用させるにはどうすればよいですか?

VB.netWebClientにCookieを記憶させたいのですが。

私は多くのオーバーロードクラスを検索して試しました。

POSTを介してWebサイトにログインし、次にPOSTを別のページに移動して、セッションを保持したままコンテンツを取得したい。

これは、WebBrowserコントロールを使用せずにVB.netで可能ですか?

Chilkat.HTTPを試しましたが、機能しますが、.Netライブラリを使用したいと思います。

18
Jeremy

@Guffaが言うように、CookieContainerを格納するWebClientから継承する新しいクラスを作成します。これを実行し、リファラーを存続させるために使用するコードは次のとおりです。

Public Class CookieAwareWebClient
    Inherits WebClient

    Private cc As New CookieContainer()
    Private lastPage As String

    Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
        Dim R = MyBase.GetWebRequest(address)
        If TypeOf R Is HttpWebRequest Then
            With DirectCast(R, HttpWebRequest)
                .CookieContainer = cc
                If Not lastPage Is Nothing Then
                    .Referer = lastPage
                End If
            End With
        End If
        lastPage = address.ToString()
        Return R
    End Function
End Class

上記のコードのC#バージョンは次のとおりです。

using System.Net;
class CookieAwareWebClient : WebClient
{
    private CookieContainer cc = new CookieContainer();
    private string lastPage;

    protected override WebRequest GetWebRequest(System.Uri address)
    {
        WebRequest R = base.GetWebRequest(address);
        if (R is HttpWebRequest)
        {
            HttpWebRequest WR = (HttpWebRequest)R;
            WR.CookieContainer = cc;
            if (lastPage != null)
            {
                WR.Referer = lastPage;
            }
        }
        lastPage = address.ToString();
        return R;
    }
}
46
Chris Haas

WebClientクラスにCookieを記憶させることはできません。応答からCookieコンテナを取得し、それを次のリクエストで使用する必要があります。

4
Guffa