php - 使用 php cURL 发布 json 数据
问题描述
我正在尝试使用 JSON 将一些数据发布到 API。此 API 将生成一个令牌,稍后我将需要该令牌对该 API 进行其他申请。
这是我的代码。
$data = array("grant_type" => "password", "client_id" => "454665", "client_secret" => "6544465645", "username" => "654164@54484.com", "password" => "5454644", "refresh_token" => "648654");
$data_string = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) //<- i was missing this line
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
//'Content-Length: ' . strlen($data_string))
));
$result = curl_exec($ch);
echo json_decode($result);
问题是 echo json_decode($result); 正在返回一个空白页,没有任何响应。
我在邮递员中测试了 API,它返回了一个令牌。我想我只是缺少一些东西来正确地回显数据。
解决方案
将我的评论移至答案并对其进行扩展:
运行以下命令应该会给您更多数据。
var_dump(curl_getinfo($ch));
如原始海报所述,问题原来是证书被标记为无效。通常,这是由于证书是自签名证书,但任何无效证书都会引发此错误。
对于开发,这是可以接受的。但是,在生产中,您总是希望验证您请求的 url 是否具有有效证书。这通常是出于安全原因。
添加curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
解决了问题。
推荐阅读
- php - 在 Laravel Blade 中循环时限制 html 元素
- python - 我如何计算打印了多少次?
- powershell - 使用 PowerShell 从 TFS 工作项目(TASK/BUG)下载 SQL 脚本
- python - 如何使用APScheduler添加每天在固定时间开始并在固定时间完成的作业
- node.js - TypeError `[ERR_INVALID_CALLBACK]`:在 NodeJs 上
- apache-kafka - 在 burrow 配置的拒绝列表中添加控制台使用者的原因
- string - 字符串比较总是正确的
- ruby-on-rails - 使用 arel_predicates 和正则表达式编写带有 ransack 的自定义过滤器 (RoR 6)
- android - 如何在颤动的android中捕获音频输出(扬声器,耳机等),而不是输入(麦克风)?
- python - 无法使用重定向发送附加数据以及图像路径