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 相关文章推荐
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
jQuery中clone()方法用法实例
Jan 16 Javascript
javascript比较两个日期相差天数的方法
Jul 24 Javascript
Javascript的表单验证长度
Mar 16 Javascript
分分钟玩转Vue.js组件
Oct 25 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
浅谈 Vue v-model指令的实现原理
Jun 08 Javascript
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
AngularJs 禁止模板缓存的方法
Nov 28 Javascript
原生JS实现瀑布流插件
Feb 06 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
jQuery的一些注意
2006/12/06 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
详解Vue数据驱动原理
2020/11/17 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python3 与python2 异常处理的区别与联系
2016/06/19 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
什么是lambda函数
2013/09/17 面试题
大学生个人事迹材料
2014/01/21 职场文书
部队万能检讨书
2014/02/20 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
优秀大学生自荐信
2014/06/09 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python