记录一次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 @ 2024-06-16 11:28  今天星期几。  阅读(187)  评论(0)    收藏  举报