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 document.referrer 用法
Apr 30 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
Sep 06 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
JavaScript头像上传插件源码分享
Mar 29 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
Angular数据绑定机制原理
Apr 17 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
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
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python入门_条件控制(详解)
2017/05/16 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
我的中国梦演讲稿高中篇
2014/08/19 职场文书
委托书的写法
2014/09/16 职场文书
2014年教务处工作总结
2014/12/03 职场文书
给医院的感谢信
2015/01/21 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
停发工资证明范本
2015/06/12 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
聘任书范文大全
2015/09/21 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python