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 内存缓存加速功能memcached安装与用法
Sep 03 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
cakephp打印sql语句的方法
Feb 13 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
全面解析PHP操作Memcache基本函数
Jul 14 PHP
php事件驱动化设计详解
Nov 10 PHP
yii插入数据库防并发的简单代码
May 27 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 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
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python入门篇之字典
2014/10/17 Python
Python中下划线的使用方法
2015/03/27 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
测量实习生自我鉴定
2013/09/19 职场文书
单位单身证明范本
2014/01/11 职场文书
电台实习生求职信
2014/02/25 职场文书
创业培训计划书
2014/05/03 职场文书
企业晚会策划方案
2014/05/29 职场文书
优秀团员个人总结
2015/02/26 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
公司市场部岗位职责
2015/04/15 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
担保书怎么写 ?
2019/04/22 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
详解Django的MVT设计模式
2021/04/29 Python