2011-07-21 47 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')