我正在尝试通过cURL发送POST数据但是它没有发送数据,但是当我发送它们作为GET变量发送时,是否有人知道问题可能是什么?
curl_setopt_array($ch, array(
CURLOPT_URL => "local.new.api.test.com/authenticate/"
));
$data = array(
'username' => 'test',
'password' => 'test'
);
$data_string = json_encode($data);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
答案 0 :(得分:1)
CURLOPT_POSTFIELDS
不是json编码的字符串。它需要一个查询字符串(类似于问号后面的URL-s中的查询字符串)。
这应该有效:
$data_string = http_build_query($data, '', '&');
或者你可以让cURL扩展来做脏工作并传递一个带有键值对的数组作为值:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
来自PHP.net
此参数既可以作为urlencoded字符串传递,例如'para1 = val1& para2 = val2& ...',也可以作为数组传递,字段名称为键,字段数据为值。如果value是数组,则Content-Type标头将设置为multipart / form-data。