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的仿照flash放大图片效果代码
Mar 16 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
Nov 14 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
JS检测移动端横竖屏的代码
May 30 Javascript
Javascript 实现计算器时间功能详解及实例(二)
Jan 08 Javascript
微信小程序中input标签详解及简单实例
May 18 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 Javascript
详解JavaScript 异步编程
Jul 13 Javascript
js实现简单选项卡制作
Aug 05 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 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中的串行化变量和序列化对象
2006/09/05 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
javascript控制台详解
2015/06/25 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
vue-cli3全面配置详解
2018/11/14 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
Python sys.path详细介绍
2013/10/17 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
django2 快速安装指南分享
2018/01/05 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
盛大二次面试题
2016/11/18 面试题
利群广告词
2014/03/20 职场文书
年终工作总结范文2014
2014/11/27 职场文书
python实现简单区块链结构
2021/04/25 Python