如何让WebClient使用Cookie?
问题描述:
我想VB.net WebClient记住cookies。如何让WebClient使用Cookie?
我已经搜索并尝试了许多重载类。
我想通过POST登录到网站,然后POST到另一个页面并获取其内容,同时仍保留我的会话。
这可能与VB.net不使用WebBrowser控件?
我试过Chilkat.HTTP,它可以工作,但我想使用.Net库。
答
创建一个从WebClient继承的新类,该WebClient存储CookieContainer,如@Guffa所述。下面是我用的,做的代码,也保留引荐活着:
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;
}
}
会试试这个。谢谢。它类似于其他的继承,然后重载类找到了。 – Jeremy 2010-05-14 10:05:58
我一直使用这个多年来绝对成功。如果它不适合你,那么它不是一个cookie /会话问题,但可能是你正在蜘蛛网站使用JavaScript来修改表单状态。如果是这种情况,请检查javascript或仅使用数据包监视器或提琴手来查看实际上通过线路发送的内容。 – 2010-05-14 12:48:17
可以ne1发布这在C#中,我的问题也类似,我发布了一个问题,但我没有得到ne相关的答案..仍然搜索答案.. – FosterZ 2010-12-16 14:18:53