没有不值得去解决的问题,也没有不值得去学习的技术!

在 curl 请求 https 网址,响应为 false 的排查分析

1、在 curl 请求 https 网址,响应为 false 的排查分析。 var_dump($rst),其值为 false

PHP

$json = Helper::curlRequest("https://api.weixin.qq.com/sns/jscode2session?appid={$config['id']}&secret={$config['secret']}&js_code={$code}&grant_type=authorization_code");


    public static function curlRequest($url, $params = array(), $isreturn = true, $ispost = 0, $referer = '', $need_header = false, $user_agent = 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)')
    {
        if (empty($referer)) {
            $urlinfo = parse_url($url);
            if (isset($urlinfo['scheme'])) {
                $referer = $urlinfo['scheme'] . '://' . $urlinfo['host'] . '/';
            } else {
                $referer = '//' . $urlinfo['host'] . '/';
            }
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        //curl_setopt($ch, CURLOPT_AUTOREFERER, $referer);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_HEADER, $need_header);
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        //curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36');
        if ($ispost) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $rst = curl_exec($ch);
        curl_close($ch);
        if ($isreturn) {
            return $rst;
        }
    }


2、在 php.ini 中配置 openssl.cafile。重启 php-fpm 后,不再响应 false

Plaintext

openssl.cafile = /etc/ssl/certs/cacert.pem

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系

评论

2 条对“在 curl 请求 https 网址,响应为 false 的排查分析”的回复

  1. […] 4、最后不得不基于 curl 重新实现,终于解决。参考:在 curl 请求 https 网址,响应为 false 的排查分析 […]

  2. […] 4. Finally, I had to reimplement the request using curl, which successfully resolved the issue. Reference: Troubleshooting analysis for curl requests to https URLs returning false […]