记录一次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,好了!估计是有人在开发环境搞事情😠
虽然没找到具体的原因,但是学到了一些找原因的经验吧。
- 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);
- 命令行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
- 重启php-fpm
//查看php-fpm进程 ps aux|grep php-fpm //平滑重启 kill -USR2 4进程号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)