我的PHP curl请求有什么问题,请帮助..我没有收到任何数据

时间:2012-10-18 21:31:14

标签: php curl libcurl

它说浏览器发送了服务器无法理解的请求..我不完全理解我的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;







    ?>

2 个答案:

答案 0 :(得分:0)

我认为问题出在CURLOPT_POSTFIELDS

来自PHP手册......

要在HTTP“POST”操作中发布的完整数据。要发布文件,请在文件前加上@并使用完整路径。可以通过使用格式为'; type = mimetype'的类型的文件名来明确指定文件类型。此参数可以作为urlencoded字符串传递,如'para1 = val1&amp; para2 = val2&amp; ...',或者作为一个数组,字段名称为键,字段数据为值。如果value是数组,则Content-Type标头将设置为multipart / form-data。从PHP 5.2.0开始,如果使用@前缀将文件传递给此选项,则值必须是数组。

http://php.net/manual/en/function.curl-setopt.php

它应仅包含有效负载,而不是整个标头。

答案 1 :(得分:0)

您不需要使用cURL创建自定义请求来发出此请求,常规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;