我正在使用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;
需要尽快帮助。
由于
答案 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
因此,您似乎应该在POST
和HTTP/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')