美文网首页
php处理header传递的Response信息之-$http_

php处理header传递的Response信息之-$http_

作者: fizzday | 来源:发表于2016-04-06 18:56 被阅读4815次

在讲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'];

完美收工~~~

相关文章

网友评论

      本文标题:php处理header传递的Response信息之-$http_

      本文链接:https://www.haomeiwen.com/subject/guhmlttx.html