我有以下GET请求,它返回登录表单的HTML,表明我的身份验证,即凭据错误。当我在浏览器会话中进行身份验证并手动请求相同的URL时,我会将预期的空XML文档作为响应。我错过了什么?
var getRequest = WebRequest.Create("http://frulo.com/v1/company/subscribers.xml") as HttpWebRequest;
getRequest.Credentials = new NetworkCredential("user@company.net", "password");
using (var response = getRequest.GetResponse() as HttpWebResponse)
{
var sr = new StreamReader(response.GetResponseStream());
Response.Write(sr.ReadToEnd());
}
答案 0 :(得分:0)
他们可能阻止程序的用户代理阻止这种抓取。
答案 1 :(得分:0)
您已经知道答案:在浏览器会话中进行身份验证后,您会得到正确的答案。这意味着您在使用WebRequest
时未经过身份验证。
您提供的凭据用于HTTP authentication,但您的网站很可能使用某种基于HTML表单的身份验证。
要解决此问题,您必须使用与Web应用程序相同的身份验证机制。这可能是基于cookie的,或者会话ID可能作为POST或GET参数与每个请求一起传输。如果不了解有关该网站的更多详细信息,则很难提供更多帮助。
以下问题与您有关并且很可能对您有所帮助:
答案 2 :(得分:0)
在某些情况下,使用Web请求代理属性可能会有所帮助。我插入了一行代码和MSDN的评论。
var getRequest = WebRequest.Create("http://frulo.com/v1/company/subscribers.xml") as HttpWebRequest;
//MSDN states: Returns a proxy configured with the Internet Explorer settings of the currently impersonated user.
getRequest.Proxy = WebRequest.GetSystemWebProxy();
getRequest.Credentials = new NetworkCredential("user@company.net", "password");
using (var response = getRequest.GetResponse() as HttpWebResponse) {
var sr = new StreamReader(response.GetResponseStream());
HttpContext.Current.Response.Write(sr.ReadToEnd());
}