首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中curl -F "data={json:'code'}“?

在PHP中curl -F "data={json:'code'}“?
EN

Stack Overflow用户
提问于 2016-09-21 04:00:53
回答 2查看 264关注 0票数 1

我正在尝试使用PHP访问第三方API。

它们的命令引用如下所示:

代码语言:javascript
复制
curl "https://api.example.com/api/" \
  -H "Authorization: BEARER-TOKEN" \
  -F 'data={"language":"EN","latitude":12.345,"longitude":12.345}'

我试过了:

代码语言:javascript
复制
    $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={}"时,我得到了正确的响应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-21 04:12:55

你不应该使用Content-type: application/jsondata参数的值是JSON,但是作为一个整体,参数是以application/x-www-form-urlencoded格式发送的。

您还需要对data参数的值进行URL编码。

最好的解决方案是使用json_encode创建JSON值,然后使用post字段数组,然后curl将对字段进行正确编码。

代码语言:javascript
复制
$header = array(
    'Authorization: ' . $bearertoken
);
$fields = array('data' => 
    json_encode(array('language' => 'EN',
                      'longitude' => $longitude,
                      'latitude' => $latitude)));
票数 2
EN

Stack Overflow用户

发布于 2016-09-21 04:18:12

curl -FRFC 2388之后使用Content-Type: multipart/form-data提交表单。当您设置application/json内容类型时,您特别违反了这一点。

代码语言:javascript
复制
$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 headerAuthorization: Bearer <token>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39602826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档