2011-01-19 117 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指向顯示如何使用當前登錄的用戶憑據的請求。