• 获取请求 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;}

  • 相关阅读:
    hdu 2203
    hdu 3081
    hdu 4240 最大流量路径
    b_vj_Fiber Network(floyd思想+状态压缩)
    b_vj_Corn Fields(预处理行的状态、合法状态+枚举当前行与上一行的状态)
    b_vj_Hackers' Crackdown(预处理所有集合+检查合法集合后进行状态转移)
    b_vj_Count Color(线段树+二进制表示颜色)
    b_vj_K-th Number(二分+线段树)
    b_lg_火烧赤壁(讨论完全覆盖/部分覆盖)
    b_hdu_Ping pong(树状数组+乘法原理)
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/9593868.html
Copyright © 2020-2023  润新知