在讲header之前, 先来一个小插曲, 讲讲我是何时开始注意到header的:
最早的当然是设置字符集了,
header("Content-type: text/html; charset=utf-8")
, 不过, 很遗憾, 此header非彼header, 而是现在火热的Restful Api
带来的信息传递头, 什么, 还有header传递信息, 虽然早有耳闻, 可是, 我一直使用的是传统web
的 大GET & POST
, 可是, 由于项目的推进, 不得不接触这些东西了, 于是乎, 我goobaidugle
了一番, 发现, 这东西还挺有意思的, 于是乎, 就开始了我的header
之旅
原来传递方式不仅仅是 GET & POST
快速求救谷度娘歌
, 发现了传递阵营的另外一些小伙伴 PUT
, POST
, DELETE
, UPDATE
......(具体请自行脑补, 不在今天的讨论主体中)
遗憾的发现这些请求方式, 我们不能用传统的 $_
方式获取了, 而是有了下边这个变量, 存储着传递的头信息:
$http_response_header
没错, 他看上去像个普通的变量, 实则, 一点都不普通, 他的作用非常的大, 比如:
<?php
file_get_contents('https://www.baidu.com');
print_r($http_response_header);
# 输出结果
Array(
[0] => 'Content: text info',
[1] => 'Code: 200',
[2] => 'Error-Message: text invalid'
...... // 更多结果
);
经过这么的处理, 我们所要获取的信息, 都在这个结果中了, 于是乎, 要来惬意的获取我们想要的信息了, 然后处理数据, 完事 ~~~
可是, 可是, 可是......
这样真的就完事了么???
我们怎么拿到这个Code: 200
?
用 $http_response_header[1]
么?
这样真的合理么?
(预知是否合理, 切看下边分解)
$http_response_header 超神处理
这名字虽然叫的离谱, 但是, 却不例题, 因为处理方式确实对得起这个名字!!!
正如上边的疑问, 这样处理显然有不合理之处, 因为, 我换一个链接, 他的返回有事不同的, 这可让我头疼了, 他的索引前缀不固定, 让我这强迫症可如何是好, 于是乎, 有了一个超神解决方案, 相信聪明的童鞋已经知道了, 那就是:
分解值到对应的数组键值对
这个名字, 看上去怪怪的, 但是他实在啊, 想知道有多实在, 请看详情:
<?php
function parseHeaders( $headers )
{
$head = array();
foreach( $headers as $k=>$v )
{
$t = explode( ':', $v, 2 );
if( isset( $t[1] ) )
$head[ trim($t[0]) ] = trim( $t[1] );
else
{
$head[] = $v;
if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
$head['reponse_code'] = intval($out[1]);
}
}
return $head;
}
啥, 我裤Z都脱了, 你就给我看个函数 (-_-)....
我只想说, 别急, 且看我把他分解了来看看, 就跟看美女似的, 如果衣服一件件滑落, 是不是更好看, 咳咳, 扯远了......
这个函数, 能够把 $http_response_header
里边的值, 拆分成如下样子:
<?php
print_r( parseHeaders( $http_response_header ) );
Array(
['Content'] => 'Content',
['Code'] => 200,
['Error-Message'] => 'text invalid'
... // more param, (秀下英文)更多的参数
);
这个样子, 够风骚
吧, 没错, 键值对唯一确认...
这下好了, 终于可以惬意的为所欲为
了, 咳咳, 我是指, 可以随心所欲的拿到我们想要拿到的参数了......
要拿到这个Code: 200
:
just do like this :
$respons = parseHeaders( $http_response_header );
echo $respons['Code'];
完美收工~~~
网友评论