6

在特定情况下,我需要能够在请求/响应中禁用压缩。

使用 Firefox RestClient,我可以将一些 xml 发布到 Web 服务并使用单个标头参数“Accept-Encoding”:“”成功获取一些响应 xml,如果我不设置此标头,则响应正文将返回压缩响应正文中的一些二进制数据(这就是为什么我要禁用 gzip 作为响应)

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

有人可以阐明一下吗?RestSharp 支持吗?

4

4 回答 4

2

RestSharp 不支持禁用压缩。

如果您查看第 267 行中的源代码Http.Sync.cs(假设一个同步请求,async 在Http.Async.cs第 424 行中重复了相同的代码)

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

也就是说WebRequest,Restsharp 用于进行 http 调用的底层具有硬编码的压缩选项。有一个公开的问题记录了这一点

于 2014-10-02T02:36:15.983 回答
2

该功能(仅)似乎已添加,但悄悄添加 - 没有关于问题状态或更改日志的注释。可能是因为它没有经过充分的测试?

不过,我最近需要此功能并对其进行了测试——它确实有效。只需将RestClient实例的AutomaticDecompression属性设置为false.

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

于 2017-11-30T09:34:07.863 回答
2

使用 RestSharp v106.11.4,我无法按照 Bo Ngoh 的建议关闭自动解压。我在实例化的那一刻设置了AutomaticDecompression实例RestClient,但仍然Accept-Encoding添加了标题。

设置这个和禁用解压的ConfigureWebRequest方法是通过RestClient. 下面的代码片段允许我关闭此功能:

var client = new RestClient();
client.ConfigureWebRequest(wr =>
{
    wr.AutomaticDecompression = DecompressionMethods.None;
});
于 2020-06-05T18:29:21.863 回答
1

不确定这是否相关,但可能是未来的参考

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);
于 2020-11-03T07:59:50.890 回答