get_headers()请求https报错解决思路

场景:项目中客户端上传文件到OSS后,返回给服务端一个OSS的文件对象名称。
服务端拿到文件对象名称后,需要通过OSSClient生成一个签名url,然后提供下载服务。

下载服务中,拿到URL后要去校验该url是否有效,于是使用get_headers()去校验该文件url是否能正确响应。如下:

$fileUrl=‘https://cdn.segmentfault.com/v-5c8b4d77/global/img/touch-icon.png‘;
get_headers($fileUrl, 1);

结果报错:

get_headers(): SSL operation failed with code 1.
OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

原因:
get_headers()会对url发出请求HTTP请求,获取服务器响应头信息。
遇到url为https时,会去校验签名证书。

解决思路:
关闭证书校验。

最终实现:

//生成文件URL
        $fileUrl = ServiceInputVADataService::generateOssSignUrl($objectName);
        if (empty($fileUrl)) return $this->Error(‘无法生成文件URL,请联系技术.‘);

        //校验能否获取响应状态
        stream_context_set_default( [
            ‘ssl‘ => [
                ‘verify_host‘ => false,
                ‘verify_peer‘ => false,
                ‘verify_peer_name‘ => false,
            ],
        ]);
        if (get_headers($fileUrl, 1) === false) return $this->Error(‘生成文件URL无法访问,请联系技术.‘);

原文地址:https://blog.51cto.com/phpme/2374511

时间: 2024-08-01 10:18:51

get_headers()请求https报错解决思路的相关文章

PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)

录入预算报错时报错: 分析:这个错误是select into 语句返回多行的结果,但具体在哪? 两种方法查找,trace 或者debug 1.trace 启用调试 获取trace文件 -bash-3.2$ tkprof ERPDEV_ora_7532_RICK.trc $HOME/7532_rick.fchela.txt TKPROF: Release 11.2.0.2.0 - Development on Mon Jul 28 11:21:34 2014 Copyright (c) 1982,

nginx+php下curl请求https报502错

在做公司项目的时候使用了第三方的API接口,且接口采用的是https请求,在本地的wamp集成环境开发测试正常,放到服务器上结果报错 nginx 502 bad gateway.在论坛中爬楼了几天今天终于找到原因,php版本问题: 公司项目线上环境: 服务器安装了wdcp其中nginx是1.4.2版本 php是5.2.17版本 部署项目上去后,怎么运行都报502错,刚开始怀疑是nginx配置问题,百度了许久说请求https需要ssl于是配置了nginx的ssl后问题依旧,无奈只好继续搜索答案.

升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错(引用他人的)

升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 原因  iOS9引入了新特性App Transport Security (ATS) 新特性要求App内访问的网络必须使用HTTPS协议.但是现在公司的项目使用的是HTTP协议,使用私有加密方

CentOS 6.5 Maven 编译 Apache Tez 0.8.3 踩坑/报错解决记录

最近准备学习使用Tez,因此从官网下载了最新的Tez 0.8.3源码,按照安装教程编译使用.平时使用的集群环境是离线的,本打算这一次也进行离线编译,无奈一编译就开始报缺少jar包的错,即使手动下载jar包复制到目录.尝试使用Maven的包安装命令,还是无法消除错误.只得尝试在联网环境下先进行编译(环境与离线集群环境相同),再看编译得到的jar包是否可以在Hadoop离线集群上正常使用了. 之前从没接触过Maven,网上资料也多是和Eclipse放在一起,作为Eclipse的一个插件来说明的.时间

python3.7 urlopen请求HTTPS警告'CERTIFICATE_VERIFY_FAILED'解决办法

环境: Mac 10.13.6 python3.7 代码 from urllib.request import urlopen html = urlopen('https://en.wikipedia.org/wiki/Kevin_Bacon',) 报错如下urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) , 大概意思是证书(c

zabbix源码安装流程及报错解决方法

zabbix源码安装流程及报错解决方法 一. zabbix的介绍 1) zabbix是什么 zabbix是一款基于web页面的.开源的.企业级的,支持分布式部署的监控软件. 2)2.zabbix的作用 监控windows和Linux主机上的软硬件状态. 监控各网络设备,如路由器.交换机.防火墙.f5.打印机等. 支持邮件短信微信等平台发送告警通知. 通过web页面及图形展示监控数据. 3)zabbix的特性 由zabbix server和agent程序协同工作,还支持分布式监控,这时需要安装za

Authentication token manipulation error报错解决办法

Authentication token manipulation error报错解决办法 #参考http://blog.163.com/junwu_lb/blog/static/1916798920120103647199/ #参考https://www.zhukun.net/archives/5703

最新版ADT新建项目报错解决办法(三)

自从在谷歌官网下载了最新版的ADT,版本号version:23.0.2.1259578,集成版的(adt-bundle-windows-x86-20140702.rar).笔者就走上了与报错斗争的道路,新建项目时总无故报错,提示内容为: [2014-12-11 09:46:50 - test] E:\workspace\test\res\values\styles.xml:7: error: Error retrieving parent for item: No resource found

file_get_contents无法请求https连接的解决方法 php开启curl

file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? 解决方案有3:1.windows下的PHP,只需要到php.i