我正在通过Curl传递数据,如下所示,由于我无法正常工作,看来我做错了什么。...请指导我如何正确提出请求。
下面是完整代码:
<?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 / shipments / create时出现问题。原因:不支持的媒体 输入
答案 0 :(得分:1)
“不支持的媒体类型”错误是因为您没有发送有效的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
));
Here's a demo显示了上面代码的输出。
您还可以将代码缩短为:
$data = array(
"customer" => array(
"request_id" => "10",
"value" => "false")
)
);
$data_string = json_encode($data);
您的错误是将PHP代码中的数据创建与文本传输格式(在这种情况下为JSON)编码混淆。相反,您需要使用(嵌套的)关联数组和常规数组在PHP中创建数据,以便将其传递给json_encode()时,输出有效载荷采用API要求的正确格式。
答案 1 :(得分:0)
尝试将令牌连接到curl选项,像这样
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: ' . $your_token));