PHP实现抓取HTTPS内容


Posted in PHP onDecember 01, 2014

最近在研究Hacker News API时遇到一个HTTPS问题。因为所有的Hacker News API都是通过加密的HTTPS协议访问的,跟普通的HTTP协议不同,当使用PHP里的函数 file_get_contents() 来获取API里提供的数据时,出现错误,使用的代码是这样的:

<?php
$data = file_get_contents("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty");
......

当运行上面的代码是遇到下面的错误提示:

PHP Warning:  file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?

下面是截图:

PHP实现抓取HTTPS内容

为什么会出现这样的错误?

在网上经过一番搜索,发现遇到这样错误的人还不少,问题很直接,是因为在PHP的配置文件里没有开启一个参数,在我本机上是 /apache/bin/php.ini 里的 ;extension=php_openssl.dll 这一项,需要将前面的分号去掉。你可以用下面的脚本来检查你的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);

运行上面的这个脚本片段,在我的机器上得到的结果是:

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 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
安装APACHE
Jan 15 PHP
PHP 多进程 解决难题
Jun 22 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
Linux中为php配置伪静态
Dec 17 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
PHP的自定义模板引擎
Mar 24 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
php设置静态内容缓存时间的方法
Dec 01 #PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 #PHP
PHP清除字符串中所有无用标签的方法
Dec 01 #PHP
php防止网站被刷新的方法汇总
Dec 01 #PHP
phpstorm编辑器乱码问题解决
Dec 01 #PHP
php获取文章上一页与下一页的方法
Dec 01 #PHP
CI框架给视图添加动态数据
Dec 01 #PHP
You might like
人族 TERRAN 概述
2020/03/14 星际争霸
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
js 编程笔记 无名函数
2011/06/28 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
简单介绍Ruby中的CGI编程
2015/04/10 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
django加载本地html的方法
2018/05/27 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
python 基于opencv去除图片阴影
2021/01/26 Python
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
大学生评语大全
2014/04/18 职场文书
淘宝店策划方案
2014/06/07 职场文书
高中军训的心得体会
2014/09/01 职场文书
贫困证明书范文
2015/06/16 职场文书
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL