相关疑难解决方法(0)

在HttpClient中设置HTTP协议版本

我需要向使用HTTP版本1.0的Web服务发出请求.我正在使用HttpClient,但我无法看到任何设置HTTP版本的选项.

我在哪里可以设置请求版本?

c# http httpclient .net-4.5

8
推荐指数
1
解决办法
1万
查看次数

连接keep-alive在某些主机上无法与System.Net.Http.HttpClient一起使用

我正在使用.NET试验Heroku API System.Net.Http.HttpClient.特别是,我想keep-alive工作,以便我可以使用一个TCP连接发送许多HTTP请求,并且只进行一次SSL握手,而不是每次请求使用SSL握手设置TCP连接.

我正在测试https://api.heroku.com/status,它提供了一个很好的HTTP 200,并使用Wireshark来监控TCP流量.

Google Chrome,ApacheBench(带-k标志)和curl似乎都能够保持TCP连接打开并发送多个请求.HttpClient,不是那么多.我还针对其他主机测试了HttpClient(例如https://google.com/,我只看到一个SSL握手/ TCP设置.所以看起来这是HttpClient和Heroku API之间的糟糕交互.

这是我正在测试的代码:

private static async void TestUrl(string url)
{
    using (var client = GetClient())
    {
        await client.GetAsync(url);
        await client.GetAsync(url);
        await client.GetAsync(url);
        await client.GetAsync(url);
    }
}

private static HttpClient GetClient()
{
    var requestHandler = new HttpClientHandler
    {
        UseCookies = false,
        AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
    };

    return new HttpClient(requestHandler);
}
Run Code Online (Sandbox Code Playgroud)

我还附上了一个Wireshark屏幕截图,显示HttpClient RST在接收数据后立即决定重置()连接.

Wireshark截图

对于这里发生了什么的任何建议?

.net ssl tcp http dotnet-httpclient

7
推荐指数
2
解决办法
7515
查看次数

标签 统计

http ×2

.net ×1

.net-4.5 ×1

c# ×1

dotnet-httpclient ×1

httpclient ×1

ssl ×1

tcp ×1