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之函数直接量(function(){})()
Jun 29 Javascript
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
May 12 Javascript
原生JavaScript实现瀑布流布局
Jun 28 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
微信小程序富文本渲染引擎的详解
Sep 30 Javascript
微信小程序实现添加手机联系人功能示例
Nov 30 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
javaScript中indexOf用法技巧
Nov 26 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 加密与解密的斗争
2009/04/17 PHP
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
python各层级目录下import方法代码实例
2020/01/20 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
餐厅总厨求职信
2014/03/04 职场文书
春季防火方案
2014/05/10 职场文书
班风口号
2014/06/18 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书