记录一次curl错误的经历(没找到具体的原因)

起因:在开发环境的a项目中,curl请求一个第三方接口失败,查了一会没找到原因就没管了,此时知道的信息就是:curl_curl_exec返回null,curl_error返回空字符串。

后面发现每个第三方接口都失败,直接在服务器上curl就是成功的,我试着在代码里curl我们自己的官网首页,curl还是失败但信息和之前的不一样,是状态码(重定向到登录页面了)不符合预期。

然后问cahtcpt,对比了一下开发环境和测试环境(测试环境curl没问题)的ca证书内容是一样的,那么原因就不是ca证书过期,修改nginx配置文件指定ca证书的路径也没有用,应该不是ca证书的问题。

初步确定要么是nginx有问题,要么是php-fpm有问题。查日志都没有异常,真的找不到原因了,最后试着重启了nginx,没有用,重启php-fpm,好了!估计是有人在开发环境搞事情😠

虽然没找到具体的原因,但是学到了一些找原因的经验吧。

  1. curl调试代码:
// 初始化 CURL
$ch = curl_init();
// 设置 CURL 选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true); // 设置为 POST 方法
// 禁用 SSL 验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 执行 CURL 请求
$response = curl_exec($ch);
// 检查 CURL 是否执行成功
if ($response === false) {
// 获取 CURL 错误信息
$error = curl_error($ch);
$errorNo = curl_errno($ch);
// 记录错误日志或者输出调试信息
echo "CURL 请求失败:Error code $errorNo - $error";
} else {
// CURL 请求成功,获取 HTTP 状态码
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode == 200) {
// 处理正常响应
echo "CURL 请求成功:" . $response;
} else {
// 处理异常状态码
echo "CURL 请求返回异常状态码:" . $httpCode;
}
}
// 关闭 CURL 资源
curl_close($ch);
  1. 命令行curl
curl -X POST "https://example.com/api" \
-d '{"key1":"value1","key2":"value2"}' \
-k \
-H "Accept-Charset: utf-8" \
-H "Content-Type: application/json" \
-A "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)" \
-L
  1. 重启php-fpm
//查看php-fpm进程
ps aux|grep php-fpm
//平滑重启
kill -USR2 4进程号
posted @   今天星期几。  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示