2014-04-04 132 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'做任何事情。 –