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 相关文章推荐
javascript下过滤数组重复值的代码
Sep 10 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
浅谈Javascript实现继承的方法
Jul 06 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
详解Vue 动态添加模板的几种方法
Apr 25 Javascript
js判断输入框不能为空格或null值的实现方法
Mar 02 Javascript
vue实现城市列表选择功能
Jul 16 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
js实现全选和全不选
Jul 28 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
mysql时区问题
2008/03/26 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
关于PHP开发的9条建议
2015/07/27 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
JS模板实现方法
2013/04/03 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Python完全新手教程
2007/02/08 Python
使用cx_freeze把python打包exe示例
2014/01/24 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
企业承诺书怎么写
2014/05/24 职场文书
大学英语专业求职信
2014/06/21 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
幼师中班个人总结
2015/02/12 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸