我正在尝试使用PHP访问第三方API。
它们的命令引用如下所示:
curl "https://api.example.com/api/" \
-H "Authorization: BEARER-TOKEN" \
-F 'data={"language":"EN","latitude":12.345,"longitude":12.345}'我试过了:
$url = 'https://api.example.com/api/';
$header = array(
'Content-type: application/json',
'Authorization: ' . $bearertoken
);
$fields = 'data={"language":"EN","latitude":"'.$latitude.'","longitude":"'.$longitude.'"}';
// I've tried this too:
$fields = array('data' => '{"language":"EN","latitude":"'.$latitude.'","longitude":"'.$longitude.'"}');
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $fields,
CURLOPT_HTTPHEADER => $header,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_ENCODING => "",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);`但是服务器会返回一条消息,告诉我它没有收到我发送的参数。当我从终端发送相同的-F "data={}"时,我得到了正确的响应。
发布于 2016-09-21 04:12:55
你不应该使用Content-type: application/json。data参数的值是JSON,但是作为一个整体,参数是以application/x-www-form-urlencoded格式发送的。
您还需要对data参数的值进行URL编码。
最好的解决方案是使用json_encode创建JSON值,然后使用post字段数组,然后curl将对字段进行正确编码。
$header = array(
'Authorization: ' . $bearertoken
);
$fields = array('data' =>
json_encode(array('language' => 'EN',
'longitude' => $longitude,
'latitude' => $latitude)));发布于 2016-09-21 04:18:12
curl -F在RFC 2388之后使用Content-Type: multipart/form-data提交表单。当您设置application/json内容类型时,您特别违反了这一点。
$data = array('language' => 'EN', 'longitude' => $longitude, 'latitude' => $latitude);
$headers = array (
"Content-Type: multipart/form-data",
"Authorization: $bearertoken",
);
$postfields = array ("data" => json_encode($data));
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postfields,
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($ch, $options);
curl_exec($ch);此外,如果这是实际的文档,那么它可能是错误的。The format for Authorization header是Authorization: Bearer <token>。
https://stackoverflow.com/questions/39602826
复制相似问题