2011-10-15 6 views
3

次のように私は、サーバーへのカールとPOSTリクエストとしてXMLデータを送信しています:カール・リクエスト・損害XMLポストデータ

// $params contains xslt="<xml version ...." 
    $url = get_cfg_var('Http_Host') . "/webservice/update.php?"; 
    $strParameters = http_build_query($params); 

    $ch = curl_init($url); 
    // Set options 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $strParameters); 
    $data = curl_exec($ch); 

を今、私は/ update.phpを

$_REQUEST['xslt']は含まれていwebseriveのデータを取得するときそのように取り除かタグのほとんどは、XMLからのみいくつかのリーフデータ[が、新しい行の多くの]

USD 

    , 
    . 


    0 
    5 

私は何が起こっているかを理解するために途方に暮れています。いくつかの二重エンコードの問題ですか?

strParametersは、私はそれがカールする送信前urldecodeを試み

【等スペースを+] form-urlencodedでフォーマットに適切なデータが含まれません。それでも問題は解決しません。

+0

ブラウザでそのデータを調べると、「不思議ではありません。これはXMLで、ブラウザは知らないタグ​​をすべて非表示にします。その場合、あなたは 'htmlspecialchars'を探しているかもしれません。 – hakre

+0

いいえ - 私はブラウザでそのデータを見ていません。私は単純に_REQUEST ['xslt']をサーバー側のファイルにダンプしました。 – Fakrudeen

+0

コードにエラーが表示されません。方法はよく見えます。あなたのサーバー*がデータを変更する可能性があります。あなたはbase64エンコードして、スクリプトで再度デコードし、それが通過するかどうかを調べることができます。 – hakre

答えて

0

これは、具体的な解決策よりもコメントですが、私の代わりに自分自身をコードの配列方法を使用することを検討する:

あなたはポストのデータを自分でエンコードする必要はありません。 HTTP "POST" の操作で投稿する

CURLOPT_POSTFIELDSフルデータ:あなたは直接配列、seeを使用することができます。 [...]このパラメータは、 'para1 = val1 & para2 = val2 &' '* のようなURLエンコードされた文字列として渡すか、フィールド名をキーとしフィールドの値をとして配列として渡すことができます。 valueが配列の場合、Content-Typeヘッダーはmultipart/form-dataに設定されます。

関連する問題