gpt4 book ai didi

c# httpclient post force 单包

转载 作者:可可西里 更新时间:2023-11-01 02:31:03 25 4
gpt4 key购买 nike

使用 Microsoft Message Analyzer,我可以看到使用 HttpClient 的发布数据正在两个 tcp 数据包中发送。一个用于标题,然后一个用于发布数据。这些数据可以很容易地放入一个数据包中,但它被分成了两个。我已明确打开 nagling 并期望 100 继续使用 ServicePointManager,但这似乎没有帮助。

        ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = true;

Microsoft Message Analyzer5023 (.Net) 显示 2 个数据包被发送到目的地,8170 (Postman) 显示 1 个数据包被发送。测试是使用相同的有效载荷完成的。

下面是一些用于在 .net 中生成请求的示例代码

    public void TestRequest()
{
var uri = new Uri("http://www.webscantest.com/");
ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = true;
var p = ServicePointManager.FindServicePoint(uri);
p.Expect100Continue = false;
p.UseNagleAlgorithm = true;
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Connection", "close");

var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};

var content = new FormUrlEncodedContent(values);

var response = client.PostAsync("http://www.webscantest.com/", content, CancellationToken.None).Result;
}

有没有办法将有效载荷强制放入单个数据包中?

使用 .Net Framework 4.7

related question here

最佳答案

所以在查看 dotnet 核心源代码(只能假设在其他 .net 版本中相同)之后,我可以在 WinHttpHandler 中看到 Request HeaderRequest Body 在不同的点发送。

请求 header 随 Interop.WinHttp.WinHttpSendRequest 一起发送。然后根据 WinHttp 文档,带有 Interop.WinHttp.WinHttpWriteData 的请求正文将 “在调用此函数之前等待 WinHttpSendRequest 完成”

我认为这个问题可以解决,如果请求正文是使用 WinHttpSendRequest 发送的,当前将正文设置为 IntPtr.Zero .

Request Header here

Request Body here

关于c# httpclient post force 单包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com