【问题标题】:restsharp accept-encoding disabling compressionrestsharp 接受编码禁用压缩
【发布时间】:2014-08-24 13:44:30
【问题描述】:
在特定情况下,我需要能够在请求/响应中禁用压缩。
使用 Firefox RestClient 我可以将一些 xml 发布到 Web 服务并使用单个标头参数“Accept-Encoding”成功获取一些响应 xml:“”
如果我不设置此标头,响应正文将返回压缩并在响应正文中包含一些二进制数据(这就是为什么我要禁用 gzip 作为响应)
现在在我的应用程序中使用相同的标头值(在 C# 中使用 RestSharp),我仍然得到二进制数据 (gzip) 作为响应。
有人可以解释一下吗? RestSharp 支持吗?
【问题讨论】:
标签:
restsharp
http-accept-encoding
【解决方案1】:
RestSharp 不支持禁用压缩。
如果您查看 Http.Sync.cs 第 267 行中的 source code(假设是同步请求,则 async 在 Http.Async.cs 第 424 行中重复了相同的代码)
webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip | DecompressionMethods.None;
也就是说,Restsharp 用于进行 http 调用的底层 WebRequest 具有硬编码的压缩选项。有一个 open issue 记录了这个
【解决方案2】:
该功能(仅)似乎已被添加,但隐秘地添加了 - 没有关于问题状态或更改日志的注释。可能是因为它没有经过充分测试?
尽管如此,我最近需要此功能并对其进行了测试 - 它确实有效。只需将RestClient 实例的AutomaticDecompression 属性设置为false。
如果您打算让您的RestClient 实例长期存在,请记住在首次使用之前执行此操作 - 该设置在使用后似乎被“锁定”并且无法更改。在我的情况下,我需要在有和没有AutomaticDecompression 的情况下拨打电话,所以我只是创建了两个不同的RestClient 实例。
【解决方案3】:
使用 RestSharp v106.11.4,我无法按照 Bo Ngoh 的建议关闭自动解压。我在RestClient 实例被实例化的那一刻设置了AutomaticDecompression,但仍然添加了Accept-Encoding 标头。
设置这个&禁用解压的方法是通过ConfigureWebRequest方法,它暴露在RestClient上。以下 sn-p 允许我关闭此功能:
var client = new RestClient();
client.ConfigureWebRequest(wr =>
{
wr.AutomaticDecompression = DecompressionMethods.None;
});
【解决方案4】:
不确定这是否相关,但可能会在未来参考
RestRequest 有IList<DecompressionMethods> AllowedDecompressionMethods,当创建新的RestRequest 时,列表为空。只有在调用 Execute 方法时,它才会填充默认值(None、Deflate 和 GZip),除非它不为空
要更新想要的解压方法,只需使用名为AddDecompressionMethod 的方法并添加想要的解压方法 - 就是这样
例子:
var client = new RestClient();
var request = new RestRequest(URL, Method.GET, DataFormat.None);
request.AddDecompressionMethod(DecompressionMethods.GZip);
var response = client.Execute(request);