HTTP请求仅适用于浏览器

时间:2009-10-19 21:53:05

标签: .net asp.net

我有以下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());
    }

3 个答案:

答案 0 :(得分:0)

他们可能阻止程序的用户代理阻止这种抓取。

答案 1 :(得分:0)

您已经知道答案:在浏览器会话中进行身份验证后,您会得到正确的答案。这意味着您在使用WebRequest时未经过身份验证。

您提供的凭据用于HTTP authentication,但您的网站很可能使用某种基于HTML表单的身份验证。

要解决此问题,您必须使用与Web应用程序相同的身份验证机制。这可能是基于cookie的,或者会话ID可能作为POST或GET参数与每个请求一起传输。如果不了解有关该网站的更多详细信息,则很难提供更多帮助。

以下问题与您有关并且很可能对您有所帮助:

  

C# Login to Website via program

答案 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());
    }