首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让WebClient使用Cookie?

如何让WebClient使用Cookie?
EN

Stack Overflow用户
提问于 2010-05-13 16:39:04
回答 2查看 29.4K关注 0票数 21

我希望VB.net WebClient记住cookies。

我已经搜索并尝试了许多重载类。

我想通过发布登录到一个网站,然后发布到另一个页面并获得其内容,同时仍然保留我的会话。

在不使用WebBrowser控件的情况下使用VB.net可以做到这一点吗?

我尝试过Chilkat.HTTP,它可以工作,但我想使用.Net库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-13 21:13:28

创建一个从WebClient继承的新类来存储CookieContainer,就像@Guffa说的那样。下面是我使用的代码,它既能做到这一点,又能让referer保持活动状态:

代码语言:javascript
复制
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#版本:

代码语言:javascript
复制
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;
    }
}
票数 51
EN

Stack Overflow用户

发布于 2010-05-13 16:42:53

您不能让WebClient类记住cookie,您必须从响应中获取cookie容器并在下一个请求中使用它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2825377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档