php使用curl获取header检测开启GZip压缩的方法


Posted in PHP onAugust 15, 2018

本文实例讲述了php使用curl获取header检测开启GZip压缩的方法。分享给大家供大家参考,具体如下:

获得网页header信息,是网站开发人员和维护人员常用的技术。网页的header信息,非常丰富,非专业人士一般较难读懂和理解各个项目的含义。

获取网页header信息,方法多种多样,就php语言来说,我作为一个菜鸟,知道的方法也有4种那么多。下面逐一献上。

方法一:使用get_headers()函数

这个方法很多人使用,也很简单便捷,只需要两行代码即可搞定。如下:

$thisurl = "https://3water.com/";
print_r(get_headers($thisurl, 1));

得到的结果为:

Array
(
    [0] => HTTP/1.1 200 OK
    [Content-Type] => text/html
    [Last-Modified] => Wed, 15 Aug 2018 01:23:03 GMT
    [ETag] => "99a921833634d41:0"
    [Server] => Microsoft-IIS/7.5
    [X-Powered-By] => 3water.com
    [Date] => Wed, 15 Aug 2018 01:31:48 GMT
    [Connection] => close
    [Content-Length] => 89251
)

方法二:使用http_response_header

代码也很简单,仅需三行:

$thisurl = "https://3water.com/";
$html = file_get_contents($thisurl ); 
print_r($http_response_header);

得到的结果为:

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Content-Type: text/html
    [2] => Last-Modified: Wed, 15 Aug 2018 01:33:04 GMT
    [3] => ETag: "7b9757e93734d41:0"
    [4] => Server: Microsoft-IIS/7.5
    [5] => X-Powered-By: 3water.com
    [6] => Date: Wed, 15 Aug 2018 01:34:15 GMT
    [7] => Connection: close
    [8] => Content-Length: 89282
)

方法三:使用stream_get_meta_data()函数

代码也只有三行:

$thisurl = "https://3water.com/";
$fp = fopen($thisurl, 'r'); 
print_r(stream_get_meta_data($fp));

得到的结果为:

Array
(
    [wrapper_data] => Array
        (
            [0] => HTTP/1.1 200 OK
            [1] => Content-Type: text/html
            [2] => Last-Modified: Wed, 15 Aug 2018 01:38:45 GMT
            [3] => ETag: "ecc8f8b43834d41:0"
            [4] => Server: Microsoft-IIS/7.5
            [5] => X-Powered-By: 3water.com
            [6] => Date: Wed, 15 Aug 2018 01:39:35 GMT
            [7] => Connection: close
            [8] => Content-Length: 89421
        )
    [wrapper_type] => http
    [stream_type] => tcp_socket/ssl
    [mode] => r
    [unread_bytes] => 7945
    [seekable] =>
    [uri] => https://3water.com/
    [timed_out] =>
    [blocked] => 1
    [eof] =>
)

上述三种方法都可以轻松获得网页header信息,且包含的信息都已经相当丰富,满足一般要求,不过比较遗憾的是,上述三种方法都不能用来检测网页是否启用了GZip压缩。要检测GZip压缩,还需其他的方法才行。这里介绍的是用curl()函数来检测。

使用curl获得header可以检测GZip压缩

先贴出代码:

<?php
$szUrl = 'http://www.webkaka.com/';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $szUrl);
curl_setopt($curl, CURLOPT_HEADER, 1); //输出header信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //不显示网页内容
curl_setopt($curl, CURLOPT_ENCODING, ''); //允许执行gzip
$data=curl_exec($curl); 
if(!curl_errno($curl))
{
  $info = curl_getinfo($curl);
  $httpHeaderSize = $info['header_size']; //header字符串体积
  $pHeader = substr($data, 0, $httpHeaderSize); //获得header字符串
  $split  = array("\r\n", "\n", "\r"); //需要格式化header字符串
  $pHeader = str_replace($split, '<br>', $pHeader); //使用<br>换行符格式化输出到网页上
  echo $pHeader;
}
?>

输出结果如下:

HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Length: 15189
Content-Type: text/html
Content-Encoding: gzip
Content-Location: http://www.webkaka.com/index.html
Last-Modified: Fri, 19 Jul 2013 03:52:28 GMT
Accept-Ranges: bytes
ETag: "0268633384ce1:5cb3"
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 19 Jul 2013 09:27:21 GMT

上面输出结果里可以看到一个项目:Content-Encoding: gzip,这个正是我们用来判断网页是否启用GZip压缩的项目。

另外,需要认真注意下本实例里的注释部分,不能少了任何一项,否则可能获取header信息有误。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
ThinkPHP php 框架学习笔记
Oct 30 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
php存储过程调用实例代码
Feb 03 PHP
PHP APC的安装与使用详解
Jun 13 PHP
php获取301跳转URL简单实例
Dec 16 PHP
CentOS安装php v8js教程
Feb 26 PHP
php的4种常见运行方式
Mar 20 PHP
PHP限制HTML内容中图片必须是本站的方法
Jun 16 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 #PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 #PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 #PHP
php+croppic.js实现剪切上传图片功能
Aug 14 #PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 #PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 #PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 #PHP
You might like
swfupload 多文件上传实现代码
2008/08/27 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
JavaScript 参考教程
2006/12/29 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
python实现二叉查找树实例代码
2018/02/08 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
python与字符编码问题
2019/05/24 Python
python用for循环求和的方法总结
2019/07/08 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python实现文字版扫雷
2020/04/24 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
仓库门卫岗位职责
2013/12/22 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
主要领导对照检查材料
2014/08/26 职场文书
十八大标语口号
2014/10/09 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
食品卫生管理制度
2015/08/06 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python