2014-04-04 157 views
0

我正在校園中的一個古老的在線學習系統的移動版本項目。我一直在嘗試幾個星期來在本網站上刮掉一些東西,但我需要先登錄才能得到它。我有搜索任何東西,包括HttpWebRequest, CookiesAwareWebClient, etcWP8 C#網站刮登錄

我的方法到現在爲止是:

  1. 找到「行動」的網址在網站的登錄表單
  2. 發送POST請求到URL
  3. 收到包含響應Cookie中的Headers["Set-Cookie"]
  4. 使用內容的URL(需要首先登錄)創建新的HttpWebRequest
  5. 將set-cookie的標題複製到該請求中。
  6. 運行它(但失敗)

我也有使用CookieAwareWebClientCookieCollection嘗試,但它沒有工作過。

如何正確地做到這一點? HttpWebRequest中Cookie的位置僅在Headers或HTTP Packets中,CookieCollection的位置在哪裏? CookieCollection是否包含在下一個請求中?

感謝

回答

0

您需要使用CookieContainer。這將處理和保存您的Cookie之間HttpWebRequest對象:

var cookieJar = new CookieContainer(); 

var loginWebRequest = WebRequest.Create(loginUrl) as HttpWebRequest; 
loginWebRequest.CookieContainer = cookieJar; 
// Execute the Web Request 

var authRequiredWebRequest = WebRequest.Create(protectedUrl) as HttpWebRequest; 
authRequiredWebRequest.CookieContainer = cookieJar; 
// Execute the next request 
// It will have the auth cookie set appropriately 
+0

我是否執行這樣的網絡請求? 'loginWebRequest.BeginGetResponse(新的AsyncCallback(ResponseCallback),loginWebRequest);' 它將運行ResponseCallback()函數,做我需要運行 'VAR authRequiredWebRequest = WebRequest.Create(protectedUrl)爲HttpWebRequest的; authRequiredWebRequest.CookieContainer = cookieJar;' 裏面的ResponseCallback()函數?如果是的話,cookieJar呢? –

+0

@JohanesEffendi - 您可以根據需要執行請求,但您確實需要等到執行第一個請求時才執行第二個請求。由於HttpWebRequest會爲你更新,因此你也不需要用'cookieJar'做任何事情。 –