【问题标题】: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 实例。

      【讨论】:

      • 我试过这个。它可以编译,但该功能似乎已损坏或我做错了。数据仍然会自动为我解压缩。 Bo Ngoh 的回答中提到的线程在这里:github.com/restsharp/RestSharp/issues/561
      【解决方案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);
        

        【讨论】:

          猜你喜欢
          • 2015-07-21
          • 1970-01-01
          • 2014-05-24
          • 1970-01-01
          • 2021-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多