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 相关文章推荐
php 301转向实现代码
Sep 18 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
PHP查询网站的PR值
Oct 30 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
php图片上传类 附调用方法
May 15 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
php-app开发接口加密详解
Apr 18 PHP
php探针使用原理和技巧讲解
Sep 17 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
建立动态的WML站点(一)
2006/10/09 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
Convert Seconds To Hours
2007/06/16 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python如何读写csv数据
2018/03/21 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
关于是否需要写商业计划书
2014/02/07 职场文书
超市中秋节活动方案
2014/02/12 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
建议书怎么写
2014/03/12 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
世界遗产导游词
2015/02/13 职场文书
父亲节寄语大全
2015/02/27 职场文书