2011-01-19 118 views
29

我想在C#中使用WebClient对象下载某些内容,但下载域需要我登录。如何使用WebClient登录并保存会话数据?我知道如何使用WebClient发布数据。如何使用WebClient登录网站?

+1

服务器需要什么样的身份验证机制?基本,窗体,Windows/NTLM? – 2011-01-19 21:12:29

+2

大声笑我解决了这个问题,通过从Firefox浏览器中查找maunally来添加数值:) webClient.Headers.Add(“Cookie”,“PHPSESSID = xxxxxxx; mosesuser = xxxxxxx;”); – MonsterMMORPG 2011-01-19 21:59:18

+0

哪些值?你的意思是真正的auth cookie吗?请记住,该值可能会过期,并且不能在以后重新使用。 – 2011-01-19 22:50:28

回答

47

如果您遇到的问题是您可以进行身份​​验证,但您无法在此处保留身份验证Cookie,那么此Cookie是Cookie识别的WebClient版本。

private class CookieAwareWebClient : WebClient 
{ 
    public CookieAwareWebClient() 
     : this(new CookieContainer()) 
    { } 
    public CookieAwareWebClient(CookieContainer c) 
    { 
     this.CookieContainer = c; 
    } 
    public CookieContainer CookieContainer { get; set; } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 

     var castRequest = request as HttpWebRequest; 
     if (castRequest != null) 
     { 
      castRequest.CookieContainer = this.CookieContainer; 
     } 

     return request; 
    } 
} 

编辑: 你给我的链接使用窗体身份验证与HTTP POST,我没有走,虽然它的时间,但至少它可以让你与谷歌开始。

-1

看看使用Credentials属性。例如。如果使用基本身份验证,则必须使用正确的用户名和密码将该属性设置为NetworkCredential的实例。

sample指向显示如何使用当前登录的用户凭据的请求。