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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
初级的用php写的采集程序
Mar 16 PHP
php 采集书并合成txt格式的实现代码
Mar 01 PHP
php 保留小数点
Apr 21 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
laravel框架中视图的基本使用方法分析
Nov 23 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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列出一个目录下的所有文件的代码
2012/10/09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
删除节点的jquery代码
2014/01/13 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
Python 互换字典的键值对实例
2019/02/12 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python代码能做成软件吗
2020/07/24 Python
Python实现一个论文下载器的过程
2021/01/18 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
极简的HTML5模版
2015/07/09 HTML / CSS
如何理解transaction事务的概念
2015/05/27 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
酒店端午节活动方案
2014/08/26 职场文书
学习退步检讨书
2014/09/28 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
房贷工资证明范本
2015/06/12 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
python实现双向链表原理
2022/05/25 Python
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android