即使AllowAutoRedirect = true,HttpClient也不会重定向

Die*_*ego 5 .net c# dotnet-httpclient .net-core

我正在尝试解析wiki空间页面,但我无法获得实际页面.我不确定它是否是一个HttpClient错误或一些丢失的配置.

这是我的代码:

HttpClientHandler handler = new HttpClientHandler();
handler.AllowAutoRedirect = true;
_httpClient = new HttpClient(handler);

HttpResponseMessage response = await _httpClient
    .GetAsync("http://medivia.wikispaces.com/Monsters");
Run Code Online (Sandbox Code Playgroud)

当我运行该代码时,我得到StatusCode 302并被发送到https://session.wikispaces.com/1/auth/auth?authToken=token.我希望HttpClient能够跟随302,因为我有AllowAutoRedirect = true.

这是我第一次遇到这个问题.它适用于Postman和RestClient,它是RestSharp的一部分.

Nat*_*ini 6

HttpClient未正确重定向的原因是因为该站点将您重定向到HTTPS然后再返回到HTTP.快速解决方法是改为GET https://medivia.wikispaces.com/Monsters,无论如何这是一个更好的主意:

HttpResponseMessage response = await _httpClient.GetAsync("https://medivia.wikispaces.com/Monsters");
// Works fine! :)
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么它不能以第一种方式工作,所以我挖得更深一些.如果您在浏览器或网络客户端中观看网络跟踪,则会发生以下情况:

GET http://medivia.wikispaces.com/Monsters
302 https://session.wikispaces.com/1/auth/auth?authToken=token
302 http://medivia.wikispaces.com/Monsters?redirectToken=token
Run Code Online (Sandbox Code Playgroud)

从加密(HTTPS)连接到未加密的连接302会导致HttpClientHandler自动停止跟踪.据我所知,这是HttpClientHandlerWindows实现的一个安全性怪癖,因为Unix在我的非正式测试中似乎并不关心HTTPS-> HTTP重定向.

  • @mjwrazor 设置 `HttpClientHandler.AllowAutoRedirect = false` 将禁用任何重定向行为。 (2认同)