【问题标题】:Compressing post requests sent to Gmail API压缩发送到 Gmail API 的帖子请求
【发布时间】:2015-12-08 21:55:27
【问题描述】:

按照here 的建议,我在 Gmail API 中使用批处理请求。我注意到实际的请求变得非常大,所以我想用 gzip 压缩它们。 我已经让它工作到我看到压缩的 POST 请求在 Fiddler 上发出,但我收到了错误的请求消息:

<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Bad Request</H1>
<H2>Error 400</H2>
</BODY>
</HTML>

Gmail API 根本不支持这一点,还是我忽略了什么?

这是代码(我使用的是 C#,如您所见):

    private static async Task<StreamContent> CompressedContent(HttpContent content)
    {
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(ms,
                            System.IO.Compression.CompressionMode.Compress, true))
        {
            await content.CopyToAsync(gzip).OnThreadPool();
            await gzip.FlushAsync();
        }
        ms.Position = 0;

        StreamContent streamContent = new StreamContent(ms);
        streamContent.Headers.ContentType = content.Headers.ContentType;
        streamContent.Headers.Add("Content-Encoding", "gzip");
        return streamContent;
    }

    private async Task<string> GetResponseItemResult(string batchUri, MultipartContent cont, bool compressed = false)
    { 
        using (var httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }))
        using (var request = new HttpRequestMessage
        {
            RequestUri = new Uri(batchUri),
            Method = HttpMethod.Post
        })
        {
            if (compressed)
                request.Content = await CompressedContent(cont);
            else
                request.Content = cont;

            //Authentication stuff removed
            //...

            HttpResponseMessage responseMessage = await httpClient.SendAsync(request).OnThreadPool();

            //Error handling removed
            //...
            return await responseMessage.Content.ReadAsStringAsync();
        }

    }

如果我不使用压缩,而是直接传递内容,它可以正常工作。 如前所述,实际内容是一个批处理请求,Fiddler 可以很好地读取它,压缩或未压缩。

【问题讨论】:

标签: gmail-api google-api-dotnet-client


【解决方案1】:

API 客户端库仍然有一个关于这个问题的 open bug,不是吗?

来源包含以下注释:

// Batch request currently doesn't support GZip. Uncomment when the issue will be resolved.

我想这就解决了?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多