cURL使用PHP中的自定义标头将json文件发送到API

时间:2016-06-09 16:02:16

标签: php curl

因此,使用cURL

向API发送文件时遇到小问题

这是给定的示例

curl -X POST \
  --header "Content-Type:application/json" \
  -d @trace.json \
  "https://api.mapbox.com/matching/v4/mapbox.driving.json"

这会返回准确的数据。

我想要实现的是相同但使用vanilla PHP

function sendRequest() {
    // initialise the curl request
    $request = curl_init('https://api.mapbox.com/matching/v4/mapbox.driving.json');

    // send a file
    curl_setopt($request, CURLOPT_POST, true);
    curl_setopt(
    $request,
    CURLOPT_POSTFIELDS,
    array(
      'header' => 'Content-Type:application/json',
      'file' => '@' . realpath('trace.json')
    ));

    // output the response
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
    echo curl_exec($request);

    // close the session
    curl_close($request);

}
sendRequest();

我试过这个,但这会返回一个无效的输入错误,尽管输入是从示例中复制的。

我有一种感觉,它要么是我要发送的CURLOPT_POSTFIELDS,要么整个结构是错误的。

1 个答案:

答案 0 :(得分:0)

使用CURLOPT_HTTPHEADER,而不是将标头传递给POST数据,如下所示:

curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Content-Type:application/json'
));

curl_setopt($request, CURLOPT_POSTFIELDS, array(
    'file_contents' => '@' . realpath('trace.json')
));