我试图在c#中发送HTTP请求,看起来像来自某个软件的HTTP请求。我想使用System.Net.HttpWebRequest
,但它并没有给我控制它的头:他们的字母大小写不能改变(例如,我想要Connection
头是keep-alive
而不是Keep-Alive
),我没有完全控制头的顺序,等等。
我尝试使用CodeScales库中的HttpClient
。不幸的是,它不能自动解压缩响应(参见HttpWebRequest.AutomaticDecompression
)。我自己用System.IO.Compression.GZipStream
和DeflateStream
解压它,但是当响应具有标题Transfer-Encoding: chunked
时,它不起作用。System.Net.Http.HttpRequestHeaders
似乎比HttpWebRequest
对标题有更多的控制,但仍然不够。
怎么做呢?
编辑:我知道HTTP接受这些标头作为有效的,但我正在与服务器一起工作,验证标头并拒绝响应,如果它们不完全是它所期望的。
要在HTTPWebRequest类中设置一些头,您必须使用类中的属性(例如HTTPWebRequest)。KeepAlive = true),或者您必须通过调用请求头的add方法来向请求添加自定义头。重要的是,当你试图添加标头(以自定义方式)时,它已经是请求的一个属性,它会给你一个错误。
objRequest.Headers.Add("Accept", "some data");
是不正确的。你宁可说。
objRequest.Accept = "some data";
你可以:
objRequest.KeepAlive = true;
不用太担心字母大小写,只要您向服务器发送适当的标题就没关系。