c# Httpclient 请求在 Windows 10 上工作正常返回 403 在 Windows 7 上被禁止(相同的代码)
Posted
技术标签:
【中文标题】c# Httpclient 请求在 Windows 10 上工作正常返回 403 在 Windows 7 上被禁止(相同的代码)【英文标题】:c# Httpclient request working fine on windows 10 returns 403 forbidden on windows 7 (same code) 【发布时间】:2021-12-14 01:33:55 【问题描述】:var handler = new HttpClientHandler
AllowAutoRedirect = false,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
UseCookies = true,
CookieContainer = new CookieContainer(),
UseProxy = false,
SslProtocols = SslProtocols.Tls12
;
using var client = new HttpClient(handler, true)
Timeout = TimeSpan.FromSeconds(15)
;
client.DefaultRequestHeaders.Add("Accept", "*/*");
client.DefaultRequestHeaders.Add("User-Agent", "API");
using var response = await client.PostAsync(websiteUrl, content, cancellationToken);
if (!response.IsSuccessStatusCode)
return string.empty
return await response.Content.ReadAsStringAsync();
上面的代码在我测试过的任何 Windows 10 机器上都可以正常工作,但在 Windows 7 上返回禁止的 403。
有人有什么想法吗?我已经在处理程序的初始化程序上尝试了 UseDefaultCredentials = true 但行为仍然相同。
content是一个简单的字符串json内容。
【问题讨论】:
什么版本的 .NET?你打的是同一个服务器吗?客户端和服务器上启用了哪些 TLS 协议(并且您在请求中使用 https)?提供此请求时服务器的日志是否可用,它们有帮助吗?我建议在工作和非工作机器上使用 Fiddler 和跟踪(尽管 UseProxy=false 可能会导致问题)。 【参考方案1】:403 可能是由于 Windows 7 默认不支持 TLS: How to enable TLS 1.2 on clients
早期版本的 Windows,例如 Windows 7 或 Windows Server 2012, 默认情况下不启用 TLS 1.1 或 TLS 1.2 以实现安全通信 使用 WinHTTP。
检查您是否可以在 Win 7 机器上启用 TLS 1.2。或者尝试一起删除 SSL 传输:
SslProtocols = SslProtocols.None
【讨论】:
我启用了 TLS 1.2,因为它在 Windows 7 中根本不起作用,因为服务器也使用它。如果没有启用它,我只会遗憾地收到通信错误 Http 异常。同样在我的理解中,如果你像我在上面的代码中那样启用它,.net 会自动支持它,因为所有其他需要 TLS 1.2 的 API 只需在代码中启用它就可以正常工作。我也会检查注册表值并通知您。 @GregoryGR 我很好奇你是否知道为什么 Win 7 机器的请求因 403 而失败。 还没有,因为遗憾的是,您的建议也没有奏效。我还在看,等我知道了会告诉你的。 期待听到您的想法。以上是关于c# Httpclient 请求在 Windows 10 上工作正常返回 403 在 Windows 7 上被禁止(相同的代码)的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义标头的 C# HttpClient POST 请求发送不正确的 Content-Type 标头字段
使用 HttpClient 和 C# 在 post 请求中发送 json
使用承载令牌在 C# 中构建 post HttpClient 请求