PHP抓取HTTPS内容和错误处理的方法


Posted in Javascript onSeptember 30, 2016

问题

在研究Hacker News API的时候遇到一个HTTPS问题。因为所有的Hacker News API都是通过加密的HTTPS协议访问的,跟普通的HTTP协议不同,当使用PHP里的函数 file_get_contents() 来获取API里提供的数据时,出现错误

使用的代码是这样的:

<?php
$data = file_get_contents("/http://blog.it985.com/");
?>

当运行上面的代码是遇到下面的错误提示:

PHP Warning: file_get_contents(): Unable to find the wrapper “https” ? did you forget to enable it when you configured PHP?

为什么会出现这样的错误?

在网上经过一番搜索,发现遇到这样错误的人还不少,问题很直接,是因为在PHP的配置文件里没有开启一个参数,在我本机上是 /apache/bin/php.ini 里的 ;extension=php_openssl.dll 这一项,需要将前面的分号去掉。

你可以用下面的脚本来检查你的PHP环境的配置:

<?php
$w = stream_get_wrappers();
echo 'openssl: ', extension_loaded ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_dump($w);

运行上面的这个脚本片段,在我的机器上得到的结果是:

<?php
openssl: no
http wrapper: yes
https wrapper: no
wrappers: array(10) {
[0]=>
string(3) "php"
[1]=>
string(4) "file"
[2]=>
string(4) "glob"
[3]=>
string(4) "data"
[4]=>
string(4) "http"
[5]=>
string(3) "ftp"
[6]=>
string(3) "zip"
[7]=>
string(13) "compress.zlib"
[8]=>
string(14) "compress.bzip2"
[9]=>
string(4) "phar"
}

替代方案

发现错误,改正错误,这很简单,困难的是,发现错误后无法改正错误。我原本是想将这个脚本方法远程主机上,但我无法修改远程主机的PHP配置,结果是,我无法使用这一方案,但我们不能在一棵树上吊死,这条路走不通,看看有没有其它路。

另外一个我经常用的PHP里抓取内容的函数是 curl ,它比 file_get_contents() 更强大,提供了很多的可选参数。对于访问 HTTPS 内容的问题,我们需要使用的 CURL 配置参数是:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

你可以从语义上看出,它是忽略/跳过了SSL安全验证。也许这不是一个很好的做法,但对于普通的场景中,这几经足够了。

下面是利用 Curl 封装的一个能访问HTTPS内容的函数:

function getHTTPS($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}

总结

以上就是PHP抓取HTTPS内容和错误处理方法的全部内容了,希望本文的内容对大家学习或者使用PHP能有所帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
30个精美的jQuery幻灯片效果插件和教程
Aug 23 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
Javascript实现图片不间断滚动的代码
Jun 22 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
JS面向对象编程基础篇(三) 继承操作实例详解
Mar 03 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 #Javascript
关于List.ToArray()方法的效率测试
Sep 30 #Javascript
微信小程序 window_x64环境搭建
Sep 30 #Javascript
JS框架之vue.js(深入三:组件1)
Sep 29 #Javascript
JavaScript 对象详细整理总结
Sep 29 #Javascript
JS实现拖动滚动条评分的效果代码分享
Sep 29 #Javascript
Angular 中 select指令用法详解
Sep 29 #Javascript
You might like
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
JavaScript中的私有成员
2006/09/18 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
jQuery中parents()方法用法实例
2015/01/07 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
Python模块WSGI使用详解
2018/02/02 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
提高python代码运行效率的一些建议
2020/09/29 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
ET Mall东森购物网:东森严选
2017/03/06 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
工作自我评价分享
2013/12/01 职场文书
亲属关系公证书
2014/04/08 职场文书
文明工地标语
2014/06/16 职场文书
如何才能写好调研报告?
2019/07/03 职场文书