HttpClient没有成功状态码

时间:2017-05-27 03:16:02

标签: c# httpclient

我尝试通过HttpClient访问此link,但每次都说IsSuccessStatusCodefalse。在过去,我能够获得内容,但现在它不会工作。它为我提供了302响应代码。

我正在尝试的代码是:

var handler = new HttpClientHandler()
            {
                AllowAutoRedirect = false,
                UseCookies = true,
                PreAuthenticate = true,
                UseDefaultCredentials = true
            };
            var client = new HttpClient(handler);
            //client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
            var data = await client.GetAsync(Url);
            if (!data.IsSuccessStatusCode)
            {
                ;
            }
            var doc = new HtmlDocument();
            var content = await data.Content.ReadAsStringAsync();

有人可以告诉我这里我做错了什么,我怎么能让它发挥作用?所以我可以得到内容。谢谢 附:我得到网站所有者的许可才能使用该网站。

1 个答案:

答案 0 :(得分:2)

快速解决方案

AllowAutoRedirect = false // change this to true

IsSuccessStatusCode发生了什么?

让我们先看一下 HttpResponseMessage类来实现IsSuccessStatusCode属性。

public bool IsSuccessStatusCode
{
    get { return ((int)statusCode >= 200) && ((int)statusCode <= 299); }
}
  

如您所见, 302 状态代码将返回false

302状态代码

请求的资源暂时驻留在不同的URI下。由于重定向有时可能会被更改,因此客户端应该继续使用Request-URI来处理将来的请求。如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存。

临时URI应该由响应中的Location字段给出。除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释。

如果收到302状态代码以响应GET或HEAD以外的请求,则除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件。发出的。

来源:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3