我正在尝试登录 www.diary.com使用 httpwebrequest 对象。但是,它总是登录失败,并一直给我返回登录页面。谁能告诉我什么是错的?
我的代码如下:
// prepare the web page we will be asking for
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(@"http://diary.com/events/agenda");
request.ContentType = "text/html";
request.Credentials = new NetworkCredential(@"user@hotmail.com", "password");
request.AllowAutoRedirect = true;
request.Referer = @"http://diary.com/";
// execute the request
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
// we will read data via the response stream
Stream resStream = response.GetResponseStream();
// set the WebBrowser object documentStream to the response stream
myWB.DocumentStream = resStream;
// simply tell me the title of the webpage
MessageBox.Show(myWB.Document.Title);
请您参考如下方法:
这里有两个问题:
您在协议(protocol)级别提供凭据,这不是大多数网站(包括本网站)的工作方式。该协议(protocol)是完全匿名的,站点使用表单例份验证让您登录。您的代码需要实际创建一个 POST 请求来模拟提交登录表单。从服务器返回的响应将包含一个包含您的身份验证 token 的 cookie,这会导致...
您需要跨请求保留 cookie。提交登录请求并获取 cookie 后,您需要保留它并在每个后续请求的请求 header 中发送它。最简单的方法是使用 WebClient用于跨越多个请求,以及一个 CookieContainer为您跟踪 cookie。
如果您不确定如何模拟浏览器和网站之间的流量,可以使用一个很好的工具 Fiddler .它捕获原始请求/响应供您观察。
