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无法访问,请联系技术.');
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:get_headers()请求https报错解决思路-创新互联
地址分享:http://ybzwz.com/article/dchogo.html