"Unexpected character exception"使用 Flurl 向 StackExchange API 发出 GET 请求时



我创建了一个控制台应用程序,在该应用程序中,我向堆栈Exchange API提出了一个简单的获取请求以获取一些注释。我正在使用Flurl。此方法是从Main

调用的
private static async Task GetComments()
{
    dynamic d = await "https://api.stackexchange.com/2.2/comments?page=1&pagesize=5&order=desc&min=1513468800&max=1513555200&sort=creation&site=stackoverflow"
                        .GetJsonAsync();
}

但是,我得到了这个错误:

{"解析值时遇到的意外字符: u001f。路径'',第0行,位置0。"}

我尝试在没有运气的情况下设置这样的标题。

dynamic d = await new Url("https://api.stackexchange.com/2.2/comments.....")
               .WithHeader("Content-Encoding", "gzip")
               .WithHeader("Accept-Encoding", "gzip")
               .GetJsonAsync();

当我在浏览器中打开时,URL确实会返回适当的json

,因此似乎Flurl不支持GZIP开箱即用,并使其工作需要一些按摩。首先,您需要自定义HTTP客户端工厂:

public class GzipClientFactory : Flurl.Http.Configuration.IHttpClientFactory
{
    public HttpMessageHandler CreateMessageHandler() => new HttpClientHandler()
    {
        AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
    };
    public HttpClient CreateHttpClient(HttpMessageHandler handler) => 
        new HttpClient(handler);
}

现在配置flurl以使用以下方式:

FlurlHttp.Configure(settings => {
    settings.HttpClientFactory = new GzipClientFactory();
});

现在将支持GZIP压缩:

dynamic d = await new Url("https://api.stackexchange.com/2.2/comments.....")
               .GetJsonAsync();

更新: flurl.http现在默认支持自动减压,因此只需升级即可避免所有这些。


这是一个类似于接受的答案的选项,除了它适用于api.stackexchange.com的调用,它或多或少是单线。在启动时称其为:

FlurlHttp.ConfigureClient("https://api.github.com", cli => 
    ((HttpClientHandler)cli.HttpMessageHandler).AutomaticDecompression =
        DecompressionMethods.GZip | DecompressionMethods.Deflate);

作为副注释,Flurl的默认值与HTTPCLIENT在自动减压方面的默认值完全相同。评论中有一些注释是,GZIP与HTTPCLIENT一起使用,这让我挠头,但是似乎使用HTTPCLEINT,根据平台/版本的不同。为了使事情变得更轻松,更可预测,我正在考虑使用Flurl默认支持GZIP/DEFLATE,但我首先需要了解性能的含义,等等。

flurl.http 2.2刚刚发布,现在它将自动解压缩GZIP并默认放气。因此,新的最佳答案是:升级。:)

这是2019年,我找不到dotnet食用API的合适库。所以我自己创造了一个。还有很长的路要走。我打算尽可能地维护它。

来自nuget

Install-Package StackExchange.NET -Version 1.1.0

相关内容

  • 没有找到相关文章

最新更新