C# 如何首先放置HttpWebRequest主机头?
我正在使用标准HttpWebRequest获取html页面: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.
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这看起来很有趣,谢谢您的建议。如果我找不到更简单的解决办法,我会试试。