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 call和apply方法
Nov 24 Javascript
JavaScript获取按钮所在form表单id的方法
Apr 02 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
jquery实现数字输入框
Feb 22 Javascript
JavaScript下拉菜单功能实例代码
Mar 01 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
jquery实现图片上传前本地预览
Apr 28 jQuery
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 jQuery
如何编写一个d.ts文件的步骤详解
Apr 13 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
Sep 11 Javascript
js实现简单进度条效果
Mar 25 Javascript
React四级菜单的实现
Apr 08 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中GET变量的使用
2006/10/09 PHP
php仿ZOL分页类代码
2008/10/02 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
php中rename函数用法分析
2014/11/15 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
php实现session共享的实例方法
2019/09/19 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
微信小程序开发探究
2016/12/27 Javascript
js实现拖拽功能
2017/03/01 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
优秀研究生主要事迹
2014/06/03 职场文书
关于颐和园的导游词
2015/01/30 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
python 算法题——快乐数的多种解法
2021/05/27 Python