1 private function getHeader($name) {//獲取請求頭中$name的值 2 $name = 'HTTP_' . $name; 3 foreach ($_SERVER as $key => $value) { 4 if($key == $name) { 5 return $value; 6 } 7 } 8 return null; 9 }
若指定字段不存在則返回 null
需要特別注意的是,如果我們是用 nginx 提供反向代理服務,則需要在 nginx.conf 中將 underscores_in_headers 設置成 on (如圖)才能在請求的 headers 中帶自定義帶下划線的字段,否則 headers 中的自定義帶下划線字段會丟失。
例:
1 $header = array('token:JxRaZezavm3HXM3d9pWnYiqqQC1SJbsU','language:zh','region:GZ', 'user:xiao01', 'AMIS_USER:xiao01'); 2 3 $content = array( 4 'name' => 'fdipzone' 5 ); 6 7 echo tocurl($api, $header, $content); 8 9 /** 10 * 發送數據 11 * @param String $url 請求的地址 12 * @param Array $header 自定義的header數據 13 * @param Array $content POST的數據 14 * @return String 15 */ 16 function tocurl($url, $header, $content){ 17 $ch = curl_init(); 18 if(substr($url,0,5)=='https'){ 19 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查 20 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 從證書中檢查SSL加密算法是否存在 21 } 22 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 23 curl_setopt($ch, CURLOPT_URL, $url); 24 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 25 curl_setopt($ch, CURLOPT_POST, true); 26 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content)); 27 $response = curl_exec($ch); 28 if($error=curl_error($ch)){ 29 die($error); 30 } 31 curl_close($ch); 32 return $response; 33 }
若沒有將 nginx.conf 中的 underscores_in_headers 為 on 的話,nginx 不會將 header 中的 AMIS_USER 字段傳到我們的后端接口中,也就無法用上面的 getHeader 獲取到 AMIS_USER 字段的值了。
$header = array('token:JxRaZezavm3HXM3d9pWnYiqqQC1SJbsU','language:zh','region:GZ', 'user:xiao01', 'AMIS_USER:xiao01');
$content = array( 'name' => 'fdipzone');
echo tocurl($api, $header, $content);
/** * 發送數據 * @param String $url 請求的地址 * @param Array $header 自定義的header數據 * @param Array $content POST的數據 * @return String */function tocurl($url, $header, $content){ $ch = curl_init(); if(substr($url,0,5)=='https'){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 從證書中檢查SSL加密算法是否存在 } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content)); $response = curl_exec($ch); if($error=curl_error($ch)){ die($error); } curl_close($ch); return $response;}