2011-07-21 38 views
1

PHP CURLを使用して、そのIPを使用して別のサーバにXMLデータを投稿していますが、 "BAD REQUEST" 。 下記のコードをご覧ください。PHPでCURLでBADリクエストを取得するXMLデータを投稿する

$var2 ="<doc><item>Some content.</item></doc>"; 
    $url = "server IP";  
    $header = "POST HTTP/1.1 \r\n"; 
    $header .= "Content-type: text/xml \r\n"; 
    $header .= "Content-length: ".strlen($var2)." \r\n"; 
    $header .= "Content-transfer-encoding: text \r\n"; 
    $header .= "Connection: close \r\n\r\n"; 
    $header .= $var2; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 4); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $var2); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); 

    // Get Response 
    $data = curl_exec($ch); 


    if(curl_errno($ch)) 

     print curl_error($ch); 
    else 
     curl_close($ch); 

    echo $data; 

助けが必要です。

おかげ

答えて

0

まず、あなたがリクエストラインとしてこれを使用している:HTTP 1.1 RFCによると

$header = "POST HTTP/1.1 \r\n"; 

**Request-Line**は次のようになります。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF 

だから、それはそうですPOSTHTTP/1.1の間にURIを追加する必要があります。
(しかし、それをコーディングする前に、私は私の答えの次の段落で書いたものを読む)


その後、あなたはCURLOPT_CUSTOMREQUESTとして多くのものを渡しています。
私は(引用)あなたは、そのオプションを使用して、これらすべてのヘッダを渡すことができるとは思わない:

有効な値は、その上の「GET」のようなもの、「POST」、「CONNECT」としています。
つまり、ここにはHTTPリクエストライン全体を入力しないでください。
インスタンスの場合、「GET /index.html HTTP/1.0\r\n\r\n」と入力すると が間違っています。


あなたが(あなたがそうです)カスタムヘッダーを指定したい場合は、代わりにCURLOPT_CUSTOMREQUEST(最初の1の文書を引用)CURLOPT_HTTPHEADERオプション、使用する必要があります。

フォーマットarray('Content-type: text/plain', 'Content-length: 100')

に、設定するHTTPヘッダフィールドの配列
関連する問題