不使用 Fiddler 代理时 C# HttpClient 504 网关超时
C# HttpClient 504 Gateway Timeout when not using Fiddler proxy
我有这个简单的代码来实例化一个 HttpClient 对象,并发送一些网络请求,但是 运行 遇到了一些我将很快解释的问题:
var client = WebHelper.CreateGzipHttpClient(new WebProxy("127.0.0.1", 8888));
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
client.DefaultRequestHeaders.Add("Sec-Fetch-Mode", "navigate");
client.DefaultRequestHeaders.Add("Sec-Fetch-Site", "none");
client.DefaultRequestHeaders.Add("Sec-Fetch-User", "?1");
client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
await client.GetAsync("https://www.example.com");
await client.GetAsync("https://www.bestbuy.com");
await client.GetAsync("https://www.costco.com");
如果我删除对 example.com 的请求,后续请求将失败(bestbuy.com 上的 504 网关超时)。对我来说没有任何意义,所以想知道是否有人可以告诉我为什么会这样。
此外,如果我从 HttpClient 中删除 WebProxy,只有 example.com 的请求会成功,其他 2 个会失败。
这是怎么回事,我该如何解决?
public static HttpClient CreateGzipHttpClient(WebProxy proxy = null)
{
HttpClientHandler handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
Proxy = proxy
};
return new HttpClient(handler);
}
已通过在 Internet Explorer 的 Internet 选项中删除与 Fiddler 相关的 SSL 证书进行修复。这些即使在卸载后也没有被删除。
我有这个简单的代码来实例化一个 HttpClient 对象,并发送一些网络请求,但是 运行 遇到了一些我将很快解释的问题:
var client = WebHelper.CreateGzipHttpClient(new WebProxy("127.0.0.1", 8888));
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
client.DefaultRequestHeaders.Add("Sec-Fetch-Mode", "navigate");
client.DefaultRequestHeaders.Add("Sec-Fetch-Site", "none");
client.DefaultRequestHeaders.Add("Sec-Fetch-User", "?1");
client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
await client.GetAsync("https://www.example.com");
await client.GetAsync("https://www.bestbuy.com");
await client.GetAsync("https://www.costco.com");
如果我删除对 example.com 的请求,后续请求将失败(bestbuy.com 上的 504 网关超时)。对我来说没有任何意义,所以想知道是否有人可以告诉我为什么会这样。
此外,如果我从 HttpClient 中删除 WebProxy,只有 example.com 的请求会成功,其他 2 个会失败。
这是怎么回事,我该如何解决?
public static HttpClient CreateGzipHttpClient(WebProxy proxy = null)
{
HttpClientHandler handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
Proxy = proxy
};
return new HttpClient(handler);
}
已通过在 Internet Explorer 的 Internet 选项中删除与 Fiddler 相关的 SSL 证书进行修复。这些即使在卸载后也没有被删除。