TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
文章目录

php curl无法获得https网页内容

2024-01-05
/
2 评论
/
3,804 阅读
/
正在检测是否收录...
01/05

程序员最经常使用的curl,在php下面也是经常用的到。但是,博主友情提示您:用curl获取https的网页内容的时候,也是需要用到证书的。而这么多年,估计大家从来都没有察觉过任何更新证书的动作,证明这可能是有自动renew操作的。而目前博主手头的centos系统,却存在有使用curl无法获取https内容的问题。

利用curl或者file_get_contents获取远程http的内容时,成功。但是获取https的内容时,失败。错误提示文字类似于:

SSL operation failed with code 1. OpenSSL Error messages: error:14090086: SSL routines:ssl3_get_server_certificate:certificate vertify failed

解决方法

1、保证php.ini里面的openssl扩展肯定要打开。这个操作比较基础,不做赘述。

extension=openssl.so

2、查看一下openssl证书的默认位置,检测openssl的证书位置的代码:

php -r "print_r(openssl_get_cert_locations());"

default_cert_file是默认位置。

3、下载更新证书

下载网址:https://curl.haxx.se/docs/caextract.html

选择一个最新的perm证书下载即可,下载好的证书要放置在上述默认位置或者自定义好的位置,重启php后,就应该可以解决问题了。

4、本地服务器全局配置(云服务器可忽略)

第1步:保存下载 CA 证书包
将下载的文件 cacert.pem 保存到一个安全且不易被误删的目录,例如 PHP 的安装目录下。

第2步:修改 php.ini 配置
找到你当前 PHP 环境正在使用的 php.ini 文件。可以在命令行中运行 php --ini 来定位它的路径。
用编辑器打开 php.ini,找到并修改以下两行配置(如果没有就手动添加):

curl.cainfo = "你的绝对路径/cacert.pem"
openssl.cafile = "你的绝对路径/cacert.pem"

注意:
路径必须使用绝对路径。
Windows 下的路径分隔符建议使用 / 或 \。
curl.cainfo 影响 cURL 函数,openssl.cafile 影响 file_get_contents() 等流操作。为保全面,建议两者都设置。

第3步:重启 Web 服务器
保存 php.ini 后,必须重启你的 Web 服务器(如 Apache、Nginx)或 PHP-FPM 服务,配置才能生效

经验PHPhttpscurl网页内容抓取
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/6415/(转载时请注明本文出处及文章链接)

评论 (2)
  1. hnehqhgllh 作者
    Windows 10 · Google Chrome

    想想你的文章写的特别好

    2024-09-23 回复
  2. sowxkkxwwk 作者
    Windows 10 · Google Chrome

    博主太厉害了!

    2024-11-20 回复
3,534 文章数
92 评论量

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月