无法通过api发送json数据[重复]

Posted

技术标签:

【中文标题】无法通过api发送json数据[重复]【英文标题】:Not able to send json data through api [duplicate] 【发布时间】:2017-09-05 03:20:28 【问题描述】:

我正在使用一个外部 api,我已经获得了与该 api 相关的以下详细信息

API KEY (Mandatory Header) :- apikey : "xxxxx"
Stage Server Base Url :- https://example.com
To add Details API :- POST(/student/student_id)

我打算做的是:

我将通过 codeigniter 表单从用户那里收集数据 然后将数据转发到上面的api并得到响应 api,因此如果它成功,那么将继续执行 操作,否则需要显示错误消息

但是出于测试目的,我使用静态数组并尝试将其发送到 api。

实际发生的情况是我得到一个空白结果,因此不确定它是否有效。

以下是我的代码

<?php
$apiKey = 'xxxx';
$url = 'https://www.example.com';
$data = array("name"=> "ABC","location"=> "loc","class"=> 'tenth',"area"=> "area");

$ch = curl_init( $url );
$payload = json_encode( $data );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
$headers= curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json','Authorization: ' . $apiKey));
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec($ch);
curl_close($ch);
echo "<pre>$result</pre>";

?>

PS:我是 api 和 curl 的新手,因此不胜感激

【问题讨论】:

响应状态码是什么?您确定要通过 Authorization 标头发送 API 密钥吗?通常,该特定标头包含一个授权方案,如 BasicBearer 如果您是 api 新手,请使用 GuzzleHttp。这个库将解决你的大部分问题。 docs.guzzlephp.org @Phil 我没有得到任何回应,我无法弄清楚我错在哪里 做一个 print_r($result); @Akin 获取木板页面 【参考方案1】:
$ch = curl_init('http://www.example.com');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'POST');                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Accept: application/json',                                                                                
    'Authorization:Basic '.$apikey,
    )                                                                       
);                                                                                                                  
$result = json_decode(curl_exec($ch));

尝试在授权标头中添加其基本还是承载。希望它对你有用。

【讨论】:

仍然出现空白页 你能检查你使用的apikey是否正确吗? 是的 api 密钥是正确的 “基本”授权数据通常采用 base64 编码。我不认为这是正确的【参考方案2】:

你应该使用如下语句

curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));

【讨论】:

OP 正在发送 JSON,而不是 application/x-www-form-urlencoded

以上是关于无法通过api发送json数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

通过 Fetch API 将复杂的表单数据发送到 PHP 端点 [重复]

如何使用 axios 将文件和 JSON 数据一起发送到 API 端点?

通过 AJAX 将 JSON 数据发布到 Web API 失败,并显示“无法将 JSON 值转换为 System.Int32”

当通过发布请求发送有效的 json 数据时,Flask request.get_json() 返回 None [重复]

如何通过 cURL/PHP 使用 PUT 方法将 JSON 数据发送到 API

Swift:无法解析 JSON 数据 [重复]