httpWebRequest.AutomaticDecompression does not set “Accept_Encoding: gzip” header
我在我的 .net 3.0 应用程序中使用 Web 服务引用,并且正在尝试设置 gzip 解码。
当我使用 SoapUI 时,响应是用 gzip 压缩的,因为在请求中设置了标题 \\’Accept-Encoding: gzip,deflate\\’。发送我的 .net 请求时,它没有此标头,因此服务器未压缩响应。
我找到了这个链接,它准确地描述了我想要做什么。我实现了代码并使用调试器验证它在每个请求上都被执行,但它仍然没有添加 \\’Accept-Encoding:gzip\\’ 标头。
接下来,我通过链接在类中手动添加了标题。
1
|
httpWebRequest.Headers.Add(“Accept-Encoding”,“gzip”);
|
我终于收到了来自服务器的压缩响应!但是不,现在我得到一个格式错误的 xml 异常,我很确定这是因为即使使用链接中的类设置了以下内容,响应也没有被解压缩。
1
|
httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip;;
|
我不明白出了什么问题。
- .AutomaticDecompression = DecompressionMethods.GZip; 添加 “Accept-Encoding” 标头,设置您自己可能会干扰自动解压缩。您也应该使用 (HttpWebRequest)WebRequest.Create() ,而不是链接到的页面中使用的丑陋反射。
- 由于我使用的是 Web 引用,因此我只是在引用的 api 中调用方法,而不是显式创建 Web 请求。这些创作是由 .net 以某种方式处理的,这就是我使用这个反射代码的原因。如果我没有为 “Accept-Encoding” 添加标头,即使我设置了 .AutomaticDecompression = DecompressionMethods.GZip; 请求也没有该标头;我看到这个问题是因为我使用的是网络参考吗?
好的,我找到了解决问题的方法。
因为我使用的是网络引用,所以你必须在网络引用对象上设置 EnableDecompression = true。
所以解决方案是这样的
1
2 3 4 |
ReferredService 是 Web 引用名称。
来源:https://www.codenong.com/4866442/