C# 如何首先放置HttpWebRequest主机头?

C# 如何首先放置HttpWebRequest主机头?,c#,.net,http-headers,httpwebrequest,C#,.net,Http Headers,Httpwebrequest,我正在使用标准HttpWebRequest获取html页面: using System; using System.IO; using System.Net; namespace TestConsole.Classes { class RequestHeadersOrder { public void Test() { var req = (HttpWebRequest)WebRequest.Create("https://www.google.

我正在使用标准HttpWebRequest获取html页面:

using System;
using System.IO;
using System.Net;

namespace TestConsole.Classes {
    class RequestHeadersOrder {
        public void Test() {
            var req = (HttpWebRequest)WebRequest.Create("https://www.google.com");
            req.Proxy = new WebProxy("localhost", 8888); // for debug in Fiddler proxy (https://www.telerik.com/fiddler)
            req.Host = "www.google.com";
            req.UserAgent = "Robot-tester";
            req.Accept = "*/*";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US");
            req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
            req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            string html;
            using (var resp = req.GetResponse())
            using (var respStream = resp.GetResponseStream())
            using (var ms = new MemoryStream()) {
                respStream.CopyTo(ms);
                html = System.Text.Encoding.UTF8.GetString(ms.ToArray());
            }
            Console.WriteLine(html);
        }
    }
}
这将生成请求头(原始格式):

GEThttps://www.google.com/ HTTP/1.1
用户代理:机器人测试仪
接受:*/*
接受语言:en US
接受编码:gzip,deflate
主持人:www.google.com
连接:保持活力
但大多数浏览器使用不同的标题顺序:首先是“主机”标题,然后是“用户代理”,然后是其他标题。所以,我需要这个:

GEThttps://www.google.com/ HTTP/1.1
主持人:www.google.com
用户代理:机器人测试仪
接受:*/*
接受语言:en US
接受编码:gzip,deflate
连接:保持活力

请告诉我如何放置“主机”标题第一。这对于某些网站很重要。

您不需要。NET为您做这件事。刚刚在.NET内核中测试了这段代码-一切正常,标题“主机”放在第一位,然后是“用户代理”。因此,这只影响.NETFramework(4.7)。但不幸的是,我现在无法切换到.NET Core。也许这可以帮助您:@AndrewKotov这看起来很有趣,谢谢您的建议。如果我找不到更简单的解决办法,我会试试。