在PHP中使用CURL获取BAD请求POSTING XML数据

时间:2011-07-21 17:30:32

标签: php libcurl

我正在使用PHP CURL将一些xml数据发布到使用该IP的另一台服务器,我已满足使其工作的所有要求,但仍然出现“BAD REQUEST”错误。 看看下面的代码。

 $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;

需要尽快帮助。

由于

1 个答案:

答案 0 :(得分:0)

首先,您将此作为请求行使用:

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

根据HTTP 1.1 RFC**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_HTTPHEADER 选项,而不是CURLOPT_CUSTOMREQUEST (引用第一个文档) )

  

要设置的HTTP标头字段数组,格式为   array('Content-type: text/plain', 'Content-length: 100')