首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以适当的方式在cURL中发出HTTP请求

问以适当的方式在cURL中发出HTTP请求
EN

Stack Overflow用户
提问于 2018-10-24 10:15:56
回答 2查看 109关注 0票数 0

我正在以曲线传递数据,如下所示,似乎我做错了什么,因为它不起作用.请指导我如何正确地提出请求。

以下是完整的代码:

代码语言:javascript
复制
<?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/发运/创建的问题。原因:不支持媒体类型

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 13:18:45

“不支持媒体类型”错误是因为您没有发送有效的JSON。由于您将$data创建为字符串,然后将其创建为json_encode(),因此最终得到了服务器不识别的双重编码数据。问题中显示的代码将导致$data_string输出为

代码语言:javascript
复制
{"customer":"\r\n\"request_id\" : \"10\",\r\n \"value\": \"false\"\r\n"}

其中一个可用的版本是

代码语言:javascript
复制
{"customer": { "request_id" : "10", "value": "false" } }

为此,您可以编写代码,方法是创建一个PHP对象/数组,然后对该对象进行编码:

代码语言:javascript
复制
$data = array("request_id" => "10", "value" => "false");

$data_string = json_encode(array(
    "customer" => $data
));

这是一个演示显示上面代码的输出。

还可以将该代码缩短为:

代码语言:javascript
复制
$data = array( 
  "customer" => array(
    "request_id" => "10", 
    "value" => "false")
  )
);
$data_string = json_encode($data);

您的错误是将PHP代码中的数据创建与将其编码为文本传输格式(在本例中为JSON)混为一谈。相反,您需要使用(嵌套的)关联数组和常规数组在PHP中创建数据,这样,当您将数据传递给json_encode()时,输出有效负载是以API所需的正确格式生成的。

票数 0
EN

Stack Overflow用户

发布于 2018-10-24 10:52:33

尝试将令牌连接到curl选项,如下所示

代码语言:javascript
复制
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: ' . $your_token));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52966434

复制
相关文章

相似问题

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