1

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

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

3 回答 3

0

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

您可以将您在 POSTFIELDS 中写入的数据作为原始数据使用

$yourPostedData = file_get_contents('php://input');
于 2012-11-29T08:23:28.187 回答
0

手册

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,那么至少有两种方法可以做到这一点。

于 2012-11-29T08:25:45.067 回答
0

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

于 2012-11-29T20:03:06.173 回答