2013-11-21 64 views
-1

我使用delphi XE3將一些圖像上傳到服務器,我用chrome攔截了請求,並且im基本上發送了與IDhttp完全相同的請求,服務器響應200 OK所以我想一切都很順利。 問題是,我需要得到的迴應內容來獲取上傳的圖片的鏈接,但我得到的是:預期JSON文本時的二進制HTTP響應內容

‹  •ÒK 
à лÌ:Ôù¨Õ\¥)P‚‹¤…,Cî^K–ÅÂlddà1¿ê:/e‡ñ[email protected]®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 
+0

在開始時記得那兩個'<'和一個「round」字符 - 它們是GZip壓縮的典型代碼,所以它們暗示你試圖用gunzip來證明它 –

+0

可能的重複[無法使用IdHttp解碼響應內容](http :/ /stackoverflow.com/questions/14017186/failed-to-decode-response-content-using-idhttp) –

回答

5

從響應的頭:

Content-Encoding:gzip 

所以它的壓縮數據。不要在HTTP請求中壓縮或使用gzip解壓縮數據。

+3

或只是不要禁用Indy組件來解壓縮:http://stackoverflow.com/questions/14017186 –

+0

謝謝你,你們真棒。 – user3018535

3

的響應頭表明內容被壓縮:

Content-Encoding:gzip 

小心你要求什麼。如果您告訴服務器您可以接受gzip,則服務器可能實際上會將它發送給您。您可能手動設置了Accept-Encoding標題。

Accept-Encoding: gzip 

您可以發送一個請求頭,說你不希望任何編碼:

Accept-Encoding: identity 

見妥善以下問題

而不是發送一個請求頭類似下面的將TIdHTTP設置爲gzip:

Failed to decode response content using IdHttp