我尝试在不设置变量或数组的情况下发布数据。我不知道有可能吗? 当我发送$ 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);
答案 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¶2=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
。