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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
PHP4实际应用经验篇(1)
Oct 09 PHP
php 方便水印和缩略图的图形类
May 21 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
解决laravel id非自增 模型取回为0 的问题
Oct 11 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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学习教程之第2天
2008/06/15 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
python实现读取命令行参数的方法
2015/05/22 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
python opencv调用笔记本摄像头
2019/08/28 Python
玩具公司的创业计划书
2013/12/31 职场文书
八一演出活动方案
2014/02/03 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
团队激励口号
2014/06/06 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
golang正则之命名分组方式
2021/04/25 Golang
python缺失值的解决方法总结
2021/06/09 Python
SQL写法--行行比较
2021/08/23 SQL Server