C# 其标头可以控制并自动解压缩的HTTP请求

C# 其标头可以控制并自动解压缩的HTTP请求,c#,http,encoding,http-headers,compression,C#,Http,Encoding,Http Headers,Compression,我试图用C语言发送HTTP请求,这些请求看起来像来自某个软件的HTTP请求。我想使用System.Net.HttpWebRequest,但它没有给我对其标题所需的控制:它们的字母大小写不能更改,例如,我希望连接标题保持活动状态,而不是保持活动状态,我不能完全控制标题排序,等等 我尝试从库中使用HttpClient。不幸的是,它没有自动解压缩响应,因此无法看到HttpWebRequest.AutomaticDecompression。我自己用System.IO.Compression.GZipSt

我试图用C语言发送HTTP请求,这些请求看起来像来自某个软件的HTTP请求。我想使用System.Net.HttpWebRequest,但它没有给我对其标题所需的控制:它们的字母大小写不能更改,例如,我希望连接标题保持活动状态,而不是保持活动状态,我不能完全控制标题排序,等等

我尝试从库中使用HttpClient。不幸的是,它没有自动解压缩响应,因此无法看到HttpWebRequest.AutomaticDecompression。我自己用System.IO.Compression.GZipStream和deflatesttream解压了它,但是当响应有头时它就不工作了。 System.Net.Http.HttpRequestHeaders似乎比HttpWebRequest对头提供了更多的控制,但仍然不够

怎样才能做到呢


编辑:我知道HTTP无论如何都会接受有效的头,但我使用的服务器会验证头并拒绝响应,如果它们与预期不符。

要在HTTPWebRequest类中设置某些头,必须使用该类的属性,例如HTTPWebRequest.KeepAlive=true,或者,您必须通过调用add方法将自定义头添加到请求头中。 重要的是,如果您尝试以自定义方式添加标头,而它已经是请求的属性,它将向您发送一个错误

    objRequest.Headers.Add("Accept", "some data");
这是不正确的。你宁愿说

    objRequest.Accept = "some data";
在您的情况下,您可以:

    objRequest.KeepAlive = true;

不要为字母大小写担心太多,只要您将适当的标题发送到服务器,这并不重要。

请参阅编辑:我使用的服务器验证标题,如果标题与预期不符,则拒绝响应。服务器将查看标题的内容,不是标头的名称,因为它是请求的属性。你用KeepAlive属性测试过吗?我用fiddler测试过。如果标题与我正在模仿的应用程序创建的标题相同,则它可以工作,否则不会工作,即使唯一的区别是它们的顺序。嘿,我找到了一个很好的链接供您观看。字段名不区分大小写,这意味着使用Keep-Alive或Keep-Alive没有区别。顺便说一句,头的接收顺序也没有区别。