【问题标题】:HttpClient no success status codeHttpClient没有成功状态码
【发布时间】:2017-05-27 12:22:31
【问题描述】:

我正在尝试通过HttpClient 访问此link,但每次它都说IsSuccessStatusCode 是false。过去我能够获得内容,但现在无法正常工作。它给了我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();

有人可以告诉我我在这里做错了什么以及如何使它工作吗?所以我可以得到内容。谢谢 附言我已获得网站所有者的许可才能使用该网站。

【问题讨论】:

  • 尝试在浏览器中浏览链接并在打开 fiddler 时查看您在 fiddler 中看到的状态代码。
  • 我在 Fiddler 中寻找什么?我似乎找不到任何东西。它在浏览器中加载200 代码,但在应用程序中代码不成功。

标签: c# httpclient


【解决方案1】:

快速解决方案

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

【讨论】:

  • 问题有解决办法吗?
  • 如果我将其更改为 true,则会出现另一个错误,重定向会将安全方法更改为不安全,并且状态代码仍然是 302。我可以正常访问其他网站,但不能访问任何视频页面日本动画片。现在它也抛出一个异常“发送请求时发生错误。”
  • @Ahmar - 您应该针对您的新错误提出另一个问题,因为此答案旨在解决您的 302 未正确处理的问题。
  • 我使用 Fiddler 发现确实有一些关于重定向 url 的内容,它指向一个新的位置,但它被加密了,所以 HttpClient 无法处理它。但是感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
相关资源
最近更新 更多