它说,浏览器发送一个请求,服务器无法理解。我不明白究竟出了什么问题,我的PHP代码。 是否有人可以帮助我理解我哪里错了。 谢谢 !
<?php
$url ="http://127.0.0.1/sensor/sens/data.php";
$xml_data = file_get_contents("/usr/local/www/data/data.xml");
$header ="POST HTTP/1.0 \r\n";
$header .="Content-type: text/xml \r\n";
$header .="Content-length: ".strlen($xml_data)." \r\n";
$header .="Content-transfer-encoding: text\r\n";
$header .="Connection: close \r\n\r\n";
$header .= $xml_data;
$ch = curl_init();
curl_setopt ($ch,CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$header);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
$data = curl_exec($ch); // if the post is successful , the server will return some data.
echo $data;
#$info = curl_getinfo($ch);
#
#if(!curl_errno($ch))
# echo 'It took '.$info['total_time'].'seconds to send a request to'.$info['url'];
#
# else
#
curl_close($ch);
echo $data;
?>
我认为这个问题是CURLOPT_POSTFIELDS
从PHP手册...
完整的数据张贴在HTTP“POST”操作。 要发布一个文件,在前面加上@文件名,并使用完整路径。 文件类型可以按照与所述格式类型的文件名被明确指定“;类型= mime类型”。 此参数可以像“PARA1 = VAL1&PARA2 = val2的&...”一个urlencoded的字符串被传递或作为具有字段名作为值作为密钥和字段数据的数组。 如果值是一个阵列,所述Content-Type头将被设置为multipart / form-数据。 由于PHP 5.2.0的,值必须是一个数组,如果文件传递给这个选项与@前缀。
http://php.net/manual/en/function.curl-setopt.php
它应该只是持有有效载荷,而不是整个头部。
你并不需要创建使用卷曲,使这个要求定制的要求,定期HTTP POST就足够了。 这个问题的另一部分是,你还设置POSTFIELDS
和定制要求,这是您构建的HTTP请求,因此整个请求主要包括两个重复的字符串一样的东西。
试试这个代码,并研究它,了解它是如何工作:
<?php
$url = "http://127.0.0.1/sensor/sens/data.php";
$xml_data = file_get_contents("/usr/local/www/data/data.xml");
$headers = array('Content-Type: text/xml',
'Content-Transfer-Encoding: text',
'Connection: close');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
$data = curl_exec($ch); // if the post is successful , the server will return
// some data.
echo $data;
// info = curl_getinfo($ch);
//
// f(!curl_errno($ch))
// echo 'It took '.$info['total_time'].'seconds to send a request
// to'.$info['url'];
//
// else
//
curl_close($ch);
echo $data;
文章来源: What's wrong with my PHP curl request, please help .. I'm not getting any data back [closed]