php處理header傳遞的Response信息之-$http_response_header

在講header之前, 先來一個小插曲, 講講我是何時開始注意到header的:

最早的當(dāng)然是設(shè)置字符集了, header("Content-type: text/html; charset=utf-8"), 不過, 很遺憾, 此header非彼header, 而是現(xiàn)在火熱的 Restful Api 帶來的信息傳遞頭, 什么, 還有header傳遞信息, 雖然早有耳聞, 可是, 我一直使用的是傳統(tǒng) web 的 大 GET & POST, 可是, 由于項目的推進, 不得不接觸這些東西了, 于是乎, 我 goobaidugle 了一番, 發(fā)現(xiàn), 這東西還挺有意思的, 于是乎, 就開始了我的 header之旅

原來傳遞方式不僅僅是 GET & POST

快速求救谷度娘歌 , 發(fā)現(xiàn)了傳遞陣營的另外一些小伙伴 PUT, POST, DELETE, UPDATE ......(具體請自行腦補, 不在今天的討論主體中)
遺憾的發(fā)現(xiàn)這些請求方式, 我們不能用傳統(tǒng)的 $_ 方式獲取了, 而是有了下邊這個變量, 存儲著傳遞的頭信息:

$http_response_header

沒錯, 他看上去像個普通的變量, 實則, 一點都不普通, 他的作用非常的大, 比如:

<?php
file_get_contents('https://www.baidu.com');
print_r($http_response_header);
# 輸出結(jié)果
Array(
    [0] => 'Content: text info',
    [1] => 'Code: 200',
    [2] => 'Error-Message: text invalid'
    ......  // 更多結(jié)果
);

經(jīng)過這么的處理, 我們所要獲取的信息, 都在這個結(jié)果中了, 于是乎, 要來愜意的獲取我們想要的信息了, 然后處理數(shù)據(jù), 完事 ~~~
可是, 可是, 可是......
這樣真的就完事了么???
我們怎么拿到這個Code: 200?
$http_response_header[1] 么?
這樣真的合理么?
(預(yù)知是否合理, 切看下邊分解)

$http_response_header 超神處理

這名字雖然叫的離譜, 但是, 卻不例題, 因為處理方式確實對得起這個名字!!!
正如上邊的疑問, 這樣處理顯然有不合理之處, 因為, 我換一個鏈接, 他的返回有事不同的, 這可讓我頭疼了, 他的索引前綴不固定, 讓我這強迫癥可如何是好, 于是乎, 有了一個超神解決方案, 相信聰明的童鞋已經(jīng)知道了, 那就是:

分解值到對應(yīng)的數(shù)組鍵值對

這個名字, 看上去怪怪的, 但是他實在啊, 想知道有多實在, 請看詳情:

<?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都脫了, 你就給我看個函數(shù) (-_-)....
我只想說, 別急, 且看我把他分解了來看看, 就跟看美女似的, 如果衣服一件件滑落, 是不是更好看, 咳咳, 扯遠(yuǎn)了......
這個函數(shù), 能夠把 $http_response_header 里邊的值, 拆分成如下樣子:

<?php
print_r( parseHeaders( $http_response_header ) );
Array(
    ['Content'] => 'Content',
    ['Code'] => 200,
    ['Error-Message'] => 'text invalid'
    ... // more param,  (秀下英文)更多的參數(shù)
);

這個樣子, 夠風(fēng)騷吧, 沒錯, 鍵值對唯一確認(rèn)...
這下好了, 終于可以愜意的為所欲為了, 咳咳, 我是指, 可以隨心所欲的拿到我們想要拿到的參數(shù)了......
要拿到這個Code: 200:
just do like this :

$respons = parseHeaders( $http_response_header );
echo $respons['Code'];

完美收工~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,269評論 25 708
  • Refer to: www.threemeal.com/blog/12/ 中間件 中間件是一個鉤子框架,它們可以介...
    蘭山小亭閱讀 16,567評論 9 165
  • “#本文參加‘青春’大賽,本人保證本文為本人原創(chuàng),如有問題則與主辦方無關(guān)。自愿放棄評優(yōu)評獎資格” 平頂山學(xué)院 ...
    小半半呀閱讀 513評論 0 26
  • 她坐著時光倒流機回到了父親走的那天。她的父親病入膏肓,在最后時刻想看她和妹妹一眼。她母親讓她去見她的父親,她...
    一輪彎月閱讀 298評論 0 0