期待JSON文本时的二进制HTTP响应内容

时间:2013-11-21 17:03:02

标签: delphi http encoding gzip indy

我正在使用delphi XE3将一些图像上传到服务器,我用chrome拦截了请求,我基本上用IDhttp发送完全相同的请求,服务器响应200 OK,所以我想一切都很顺利。 问题是,我需要获取响应内容以获取上传图像的链接,但我得到的只是:

    ‹      •ÒK
à  лÌ:Ôù¨Õ\¥)P‚‹¤…,Cî^K–ÅÂlddà1¿ê:/e‡ñq@®kÙöúÚRÍ0Wº}&³–\çÉ×^   6   ä“‹ÄŽ's÷!²½½·Îᇣ¨â„1Ù€=I¥±Å$®¯±®¶ˆ‰±¯©íW¦Ûà?ËêFÖbñ=Ë©,j·Á¡gyÅßá_Öóü gÊr Á  
这是什么?我怎样才能获得Json响应?

Chrome上拦截的响应标头是:

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:169
Content-Type:application/json
Date:Thu, 21 Nov 2013 12:29:40 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
p3p:CP="CAO PSA OUR"
Pragma:no-cache

    Server:Apache/2.2.22 (Debian)
    Vary:User-Agent,Accept-Encoding
    X-Powered-By:PHP/5.4.4-14+deb7u3t-Type:application/json

2 个答案:

答案 0 :(得分:5)

来自回复标题:

 Content-Encoding:gzip

所以它是压缩数据。不允许在HTTP请求中进行压缩或使用gzip解压缩数据。

答案 1 :(得分:3)

响应标头表示内容已压缩:

Content-Encoding:gzip

要小心你所要求的。如果你告诉服务器你可以接受gzip,服务器实际上可能会发送给你gzip。您可能是手动设置Accept-Encoding标题。

而不是发送如下所示的请求标头:

Accept-Encoding: gzip

您可以发送一个表示您不想要任何编码的请求标头:

Accept-Encoding: identity

请参阅以下问题,以便为gzip正确配置TIdHTTP

Failed to decode response content using IdHttp