簡體   English   中英

C#httpclient發布強制單個數據包

[英]c# httpclient post force single packet

使用Microsoft Message Analyzer,我可以看到使用HttpClient的發布數據正在兩個tcp數據包中發送。 一個用於標題,然后一個用於發布數據。 該數據可以很容易地放入一個數據包中,但是卻被分為兩個部分。 我已經明確啟用了nagling,並期望繼續使用ServicePointManager繼續執行100次,但這似乎無濟於事。

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

Microsoft郵件分析器 5023(.Net)顯示2個數據包發送到目標,8170(郵遞員)顯示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

這里的相關問題

因此,在查看了dotnet核心源代碼(在其他.net版本中只能假定相同)之后,我可以在WinHttpHandler中看到請求標頭請求 正文在不同的位置發送。

請求標頭與Interop.WinHttp.WinHttpSendRequest一起發送。 然后根據WinHttp文檔,帶有Interop.WinHttp.WinHttpWriteData的請求主體將“等待,直到WinHttpSendRequest完成,然后調用此函數”

我認為,如果請求正文是通過WinHttpSendRequest發送的,則該問題可以解決,當前該正文設置為IntPtr.Zero

在此處請求標題

在此請求正文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM