我正在以曲线传递数据,如下所示,似乎我做错了什么,因为它不起作用.请指导我如何正确地提出请求。
以下是完整的代码:
<?php
$url = 'https://staging.logistics.com/v2/shipments/create';
$data = '
"request_id" : "10",
"value": "false"
';
$data_string = json_encode(array(
"customer" => $data
));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json'
));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Authorization: Basic ZcnM6ZHV55tbXlLZXk="
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo "$result";
?>我得到了这个HTTP错误:
415访问/v2/发运/创建的问题。原因:不支持媒体类型
发布于 2018-10-24 13:18:45
“不支持媒体类型”错误是因为您没有发送有效的JSON。由于您将$data创建为字符串,然后将其创建为json_encode(),因此最终得到了服务器不识别的双重编码数据。问题中显示的代码将导致$data_string输出为
{"customer":"\r\n\"request_id\" : \"10\",\r\n \"value\": \"false\"\r\n"}其中一个可用的版本是
{"customer": { "request_id" : "10", "value": "false" } }为此,您可以编写代码,方法是创建一个PHP对象/数组,然后对该对象进行编码:
$data = array("request_id" => "10", "value" => "false");
$data_string = json_encode(array(
"customer" => $data
));这是一个演示显示上面代码的输出。
还可以将该代码缩短为:
$data = array(
"customer" => array(
"request_id" => "10",
"value" => "false")
)
);
$data_string = json_encode($data);您的错误是将PHP代码中的数据创建与将其编码为文本传输格式(在本例中为JSON)混为一谈。相反,您需要使用(嵌套的)关联数组和常规数组在PHP中创建数据,这样,当您将数据传递给json_encode()时,输出有效负载是以API所需的正确格式生成的。
发布于 2018-10-24 10:52:33
尝试将令牌连接到curl选项,如下所示
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: ' . $your_token));https://stackoverflow.com/questions/52966434
复制相似问题