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的历史和优缺点
Oct 09 PHP
PHP中的正规表达式(二)
Oct 09 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
Windows下安装Memcached的步骤说明
Apr 25 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
php编写简单的文章发布程序
Jun 18 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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操作MongoDB的技术总结
2013/06/02 PHP
基于header的一些常用指令详解
2013/06/06 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Python原始字符串(raw strings)用法实例
2014/10/13 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
安全事故检讨书
2014/01/18 职场文书
模范教师事迹材料
2014/02/10 职场文书
商务助理求职信范文
2014/04/20 职场文书
大学专科自荐信
2014/06/17 职场文书
公司员工管理制度
2015/08/04 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
python编写函数注意事项总结
2021/03/29 Python
js Proxy的原理详解
2021/05/25 Javascript