【问题标题】:Make a request to StackExchange Api [duplicate]向 StackExchange Api 发出请求 [重复]
【发布时间】:2015-06-11 18:18:10
【问题描述】:

我正在尝试通过url 以 JSON 格式请求 StackExchange 上的标签列表,但问题是,我得到了一些损坏的文本而不是 JSON,所以我什至无法解析它。

P.S.在 RestSharp 的帮助下完成。

private void Refresh()
    {
        var client = new RestClient("http://api.stackexchange.com/2.2/tags?order=desc&sort=popular&site=stackoverflow");

        var result = client.Execute(new RestRequest(Method.GET));

        var array = JsonConvert.DeserializeObject<Root>(result.Content);

        Platforms = array.Platforms;
    }

【问题讨论】:

  • edit your question 并包含损坏的文本
  • 我不使用 c#,但我涉足了 stackexchange api,根据我的经验,响应是 gzip 编码的。使用我使用的 Java 客户端,我必须使用 gzip 解码器
  • 当你找到答案时,不要破坏你的问题。请post an answer with your solution.

标签: c# json asp.net-mvc-5 stackexchange-api


【解决方案1】:

如果您使用Fiddler 向此 URL 发出 GET 请求,您将看到响应有一个标头:

Content-Encoding: gzip

这意味着响应是用 gzip 压缩的。好消息是HttpWebRequest 可以处理:

request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

添加此行后,您将获得漂亮且可读的 JSON。

【讨论】:

  • 我知道为什么,但对我不起作用。我用过 RestSharp 现在没问题了。感谢您的帮助。
  • 我已经用你的代码对此进行了测试,它确实有效。但无论如何,我认为使用 RestSharp 是个好主意。
【解决方案2】:

正如@peeskillet 所提到的,这看起来像是压缩数据。请看一下 What is the canonical method for an HTTP client to instruct an HTTP server to disable gzip responses?,尤其是this answer

有点像

Accept-Encoding: *;q=0

应该有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2022-10-06
    • 2021-10-25
    • 2014-04-16
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多