如何强制HttpClient跟随HTTPS -> HTTP重定向?

3

我需要执行一个HTTP GET操作并跟随重定向。

using (var client = new HttpClient())
{
    var response = await client.GetAsync("https://example.com");
}

问题在于如果服务器返回一个302 HTTP代码重定向到http://...(而不是https),.NET不会遵循它(出于安全考虑)。

我如何强制HttpClient从HTTPS跟随重定向到HTTP?


2
你看过HttpClient does not follow 302 redirects这个问题吗? - Andrew Morton
问题出在完整框架的HttpClient类上。当发生这种情况时,您需要手动禁止它。您不能允许从Https到Http的重定向。您必须获取Http地址并创建一个新的HttpRequestMessage。提示用户确认或完全禁止。 - Jimi
1个回答

1

您可能需要额外做一些工作:

    using var client = new HttpClient();
    var response = await client.GetAsync("https://example.com");
    if (new[] {HttpStatusCode.Moved, HttpStatusCode.MovedPermanently}.Contains(response.StatusCode))
    {
        response = await client.GetAsync(response.Headers.Location);
    }
    // more code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接