2011-07-21 46 views
1

我使用PHP捲曲後使用IP,我fullfilled全部爲使其工作,但仍然得到「錯誤的請求」的錯誤要求某些XML數據到另一臺服務器。 看看下面的代碼。掌握在PHP POSTING 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

首先,您要使用此作爲請求行:

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

按照HTTP 1.1 RFC,該**Request-Line**應該是這樣的:

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

所以,似乎你應該添加一個URI POSTHTTP/1.1 之間210 (不過,編碼之前,讀什麼我已經寫在我的答案的下一段)


然後,你傳遞了很多東西CURLOPT_CUSTOMREQUEST
我不認爲你可以使用該選項(引用)通過所有這些頭:

有效值是像「GET」,「POST」,「CONNECT」等;
即不要在這裏輸入整個HTTP請求行。
對於 例如,輸入「GET /index.html HTTP/1.0\r\n\r\n」將是 不正確。


如果你想指定自定義頁眉(似乎你這樣做),你應該使用CURLOPT_HTTPHEADER選項,而不是CURLOPT_CUSTOMREQUEST(引用的第一個文件)

要設置的HTTP頭字段數組,格式爲 array('Content-type: text/plain', 'Content-length: 100')