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 Undefined,Null类型和NaN值区别
Oct 22 Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 Javascript
jQuery中empty()方法用法实例
Jan 16 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
JS与jQuery遍历Table所有单元格内容的方法
Dec 07 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
jQuery遍历节点方法汇总(推荐)
May 13 jQuery
ReactJS实现表单的单选多选和反选的示例
Oct 13 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 Javascript
Javascript异步编程async实现过程详解
Apr 02 Javascript
Postman参数化实现过程及原理解析
Aug 13 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 trim 去除空字符的定义与语法介绍
2010/05/31 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
PHP安全下载文件的方法
2016/04/07 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
python排序方法实例分析
2015/04/30 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
记帐员岗位责任制
2014/02/08 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
培训督导岗位职责
2015/04/10 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python