2016-09-21 39 views
1

我已經創建了php curl來發送xml請求,這似乎是登錄工作的地方。因爲如果登錄詳細信息中有任何錯誤,那麼它會顯示錯誤。但是,如果一切正常,然後把它交給在一些垃圾值響應:是否需要在我的情況下解碼curl結果?

來源主要代碼:

$contentlength=strlen($postdata); 

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_URL =>$this->url , 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0, 
    CURLOPT_CUSTOMREQUEST => "POST", 
    CURLOPT_POSTFIELDS => "$postdata", 
    CURLOPT_HTTPHEADER => array(
     "Content-Type: text/xml;charset=utf-8",   
     "Content-Length: 839", 
     "Accept: text/xml", 
     "Accept-Encoding: gzip", 
     "Authorization : $Authorization", 
     "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11", 
     "Host: $host", 
     "Connection: close" 

    ), 
)); 

輸出繼電器是這樣的:

‹d1oÂ0…÷üŠS–,Û)J›ÈuèÔ"$–²šäH£Æv°MUþ}MÒ€J·»{ŸŸï_}«¾ÐºÖèeÂæ4Ô•©[Ý,「「?¤OÉJDÜ¢ëv¸ïLõyåã‡yþ‹ Ç:oñ€6 x 

有什麼不好?我應該解碼什麼?如果是,那麼在哪個forgat我需要調試。我使用securetrading.com網站發送xml請求。

+0

爲'CURLOPT_ENCODING'設置另一個捲曲選項 –

回答

1

簡單地說,你必須從CURLOPT_HTTPHEADER數組中刪除"Accept-Encoding: gzip"

如果仍無法正常工作,使用通過gzdecode()功能

$original_output= gzdecode($curl_output); 

對於內容長度的解決問題,你要算後的數據,你已經計算並存儲在$contentlength變量的字符串長度解壓縮輸出。

"Content-Length:".$contentlength 
+0

現在就解決了。但是在給定的文檔中,它被寫爲: 在編碼XML之前計算Content-Length頭時會發生此類錯誤。 Content-Length頭必須包含請求的實際有效負載中的字節數,因此必須在執行任何字符編碼後計算。 – user3264863

+0

我不明白。你能給我一個例子,根據上面我的主要代碼? – user3264863

+0

有使用第一個選項byr刪除標題選項?或通過PHP函數的第二個選項? –

0
curl_setopt($curl, CURLOPT_ENCODING , "gzip"); 

會顯示正確結果

相關問題