发送没有vars数组的cUrl数据

时间:2012-11-28 21:28:16

标签: php curl http-post

我尝试在不设置变量或数组的情况下发布数据。我不知道有可能吗? 当我发送$ data = array('var_name'=>'var_val')时一切正常,但是当我设置$ data ='发送'时,我没有得到任何发布数据。

$ data ='要发送的样本数据';

    $ch = curl_init($url);                                                                      
    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    //curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                        

    $resp = curl_exec($ch);

3 个答案:

答案 0 :(得分:0)

原因是"发送"成为$ _POST数据的关键。为了能够看到它,在$ url的PHP文件中,执行var_dump($ _ POST);这应该显示输出的关键值。但正如你所料,它没有任何价值。

您可以将您在POSTFIELDS中编写的数据视为原始

$yourPostedData = file_get_contents('php://input');

答案 1 :(得分:0)

来自the manual

  

CURLOPT_POSTFIELDS

     

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

其他结尾假定简单字符串是键/值对。无论另一端是什么,都没有看到你传递的无键值。如果这是一个GET而不是POST,我会说只是检查查询字符串。由于情况并非如此,您将希望使用键和值发送数据,或者弄清楚另一端如何读取原始POST数据。如果另一端是PHP,则有at least two ways来执行此操作。

答案 2 :(得分:0)

POST请求不一定包含variable = value对。有时它包含原始数据。要访问它,您需要使用在这种情况下将填充原始POST数据的变量$HTTP_RAW_POST_DATA