restsharp accept-encoding禁用压缩

时间:2014-07-03 12:24:03

标签: restsharp http-accept-encoding

在特定情况下,我需要能够在requst / response中禁用压缩。

使用Firefox RestClient我可以将一些xml发布到Web服务并使用单个头参数成功获得一些响应xml" Accept-Encoding" :" " 如果我没有设置这个标题,响应主体会回复压缩响应体中的一些二进制数据(这就是为什么我要在响应中禁用gzip)

现在在我的应用程序中使用相同的标头值(在C#中使用RestSharp),我仍然得到二进制数据(gzip)作为响应。

有人可以说清楚吗?它在RestSharp中是否受支持?

4 个答案:

答案 0 :(得分:1)

RestSharp不支持禁用压缩。

如果您查看Http.Sync.cs第267行中的source code(假设同步请求,则异步在Http.Async.cs行424中具有相同的代码重复)

webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip | DecompressionMethods.None;

也就是说,Restsharp用于进行http调用的基础WebRequest具有硬编码的压缩选项。有一个open issue记录了这个

答案 1 :(得分:1)

这个功能(仅仅是)似乎已被添加,但是悄悄地 - 没有关于问题状态和更改日志的说明。可能还没有经过充分测试?

尽管如此,我最近需要这个功能并对其进行测试 - 它确实有效。只需将RestClient实例的AutomaticDecompression属性设置为false

如果您打算让RestClient实例长期存在,请记住在首次使用之前执行此操作 - 该设置似乎在使用后被“锁定”,之后无法更改。在我的情况下,我需要使用和不使用AutomaticDecompression拨打电话,因此我只创建了两个不同的RestClient个实例。

答案 2 :(得分:1)

使用RestSharp v106.11.4,我无法按照Bo Ngoh的建议关闭自动减压。在实例化实例时,我在AutomaticDecompression实例上设置了RestClient,但是仍然添加了Accept-Encoding头。

设置此选项和禁用减压的方法是通过ConfigureWebRequest中公开的RestClient方法。下面的代码段允许我关闭此功能:

var client = new RestClient();
client.ConfigureWebRequest(wr =>
{
    wr.AutomaticDecompression = DecompressionMethods.None;
});

答案 3 :(得分:0)

不确定是否与此相关,但是将来可能会参考

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);