获取请求 header 中指定字段的值

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;}

原文地址:https://www.cnblogs.com/geloutingyu/p/9593868.html