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+MSSQL分页的例子
Oct 09 PHP
php&amp;java(一)
Oct 09 PHP
MySQL GBK→UTF-8编码转换
May 24 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
使用PHP编写发红包程序
Jul 22 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
PHP通过curl获取接口URL的数据方法
May 31 PHP
PHP时间函数使用详解
Mar 21 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抽象工厂模式(Elgg)
2010/03/21 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
如何用Python绘制3D柱形图
2020/09/16 Python
python 从list中随机取值的方法
2020/11/16 Python
python爬虫 requests-html的使用
2020/11/30 Python
HTML5通用接口详解
2016/06/12 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
投标单位介绍信
2014/01/09 职场文书
期末考试复习计划
2015/01/19 职场文书
使用Python获取字典键对应值的方法
2022/04/26 Python