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 相关文章推荐
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
深入解析php之sphinx
May 15 PHP
php自动加载机制的深入分析
Jun 08 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
CI配置多数据库访问的方法
Mar 28 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 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
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php开发环境配置记录
2011/01/14 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
js有序数组的连接问题
2013/10/01 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jquery中键盘事件小结
2016/02/24 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
Python3监控疫情的完整代码
2020/02/20 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
农民工创业典型事迹
2014/01/25 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
2014年工程部工作总结
2014/11/25 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
被委托人身份证明
2015/08/07 职场文书
教师节主题班会教案
2015/08/17 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android