我尝试通过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();
有人可以告诉我这里我做错了什么,我怎么能让它发挥作用?所以我可以得到内容。谢谢 附:我得到网站所有者的许可才能使用该网站。
答案 0 :(得分:2)
AllowAutoRedirect = false // change this to true
IsSuccessStatusCode
发生了什么?让我们先看一下 HttpResponseMessage类来实现IsSuccessStatusCode
属性。
public bool IsSuccessStatusCode
{
get { return ((int)statusCode >= 200) && ((int)statusCode <= 299); }
}
如您所见, 302 状态代码将返回
false
。
请求的资源暂时驻留在不同的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