2016-09-21 12 views
1

xmlリクエストを送信するphp 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 

何が間違っている、すべてがOKである場合は、それはいくつかのゴミ値の応答を与えますか?私は何かをデコードする必要がありますか?もしそうなら、私はデバッグする必要があります。私はsecuretrading.comサイトを使用してXMLリクエストを送信します。

+0

'CURLOPT_ENCODING'の別のカールオプションを設定しました –

答えて

1

が表示されます。

それでも動作しない場合は、コンテンツの長さの解決の問題についてgzdecode()機能

$original_output= gzdecode($curl_output); 

を使用して出力を解凍するために使用あなたは既に計算して$contentlength変数に格納されているポストデータの文字列の長さをカウントする必要があります。

"Content-Length:".$contentlength 
+0

これで解決しました。しかし、指定されたドキュメントでは以下のように書かれています。 XMLをエンコードする前にContent-Lengthヘッダーが計算されると、このようなエラーが発生する可能性があります。 Content-Lengthヘッダーには、要求の実際のペイロード内のバイト数が含まれている必要があります。したがって、任意の文字エンコードが実行された後で計算する必要があります。 – user3264863

+0

私はそれを理解していません。あなたは私のメインコードの上のように私にちょうど例を与えることができますか? – user3264863

+0

ヘッダーオプションを削除する最初のオプションbyrを使用していますか?またはphp関数による2番目のオプション? –

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

は単に、あなたがCURLOPT_HTTPHEADER配列から"Accept-Encoding: gzip"を削除する必要があり、結果を適切に

関連する問題