• php通过header发送自定义数据


    本文将介绍如何通过header发送自定义数据。发送请求时,除了可以使用$_GET/$_POST发送数据,也可以把数据放在header中传输过去。

    发送header:

    我们定义了三个参数,token、language、region,放入header发送过去

    <?php
    $url = 'http://www.example.com';
    $header = array('token:JxRaZezavm3HXM3d9pWnYiqqQC1SJbsU','language:zh','region:GZ');
    $content = array(
            'name' => 'fdipzone'
    );
    
    $response = tocurl($url, $header, $content);
    $data = json_decode($response, true);
    
    echo 'POST data:';
    echo '<pre>';
    print_r($data['post']);
    echo '</pre>';
    echo 'Header data:';
    echo '<pre>';
    print_r($data['header']);
    echo '</pre>';
    
    /**
     * 发送数据
     * @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;
    }
    ?>

    接收header

    我们可以在$_SERVER中获取header数据,自定义的数据都是使用HTTP_作为前缀的,所以可以把HTTP_前缀的数据读出。

    <?php
    $post_data = $_POST;
    $header = get_all_headers();
    
    $ret = array();
    $ret['post'] = $post_data;
    $ret['header'] = $header;
    
    header('content-type:application/json;charset=utf8');
    echo json_encode($ret, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
    
    /**
     * 获取自定义的header数据
     */
    function get_all_headers(){
    
        // 忽略获取的header数据
        $ignore = array('host','accept','content-length','content-type');
    
        $headers = array();
    
        foreach($_SERVER as $key=>$value){
            if(substr($key, 0, 5)==='HTTP_'){
                $key = substr($key, 5);
                $key = str_replace('_', ' ', $key);
                $key = str_replace(' ', '-', $key);
                $key = strtolower($key);
    
                if(!in_array($key, $ignore)){
                    $headers[$key] = $value;
                }
            }
        }
    
        return $headers;
    
    }
    ?> 

    输出:

    POST data:
    Array
    (
        [name] => fdipzone
    )
    Header data:
    Array
    (
        [token] => JxRaZezavm3HXM3d9pWnYiqqQC1SJbsU
        [language] => zh
        [region] => GZ
    )
  • 相关阅读:
    【UOJ #268】【清华集训2016】数据交互(动态DP)
    【UOJ #267】【清华集训2016】魔法小程序(前缀和)
    【UOJ #266】【清华集训2016】Alice和Bob又在玩游戏(SG函数+01Trie)
    【CSP-S 2019题解】
    【CSP 2019游记】
    【CSP-S 2019模拟题解】
    sql语句: update和sql函数的冲突
    http协议之实践巩固(深度篇一)
    不错的开发工具做下记录
    javascrpt之this指向问题
  • 原文地址:https://www.cnblogs.com/jdwang-admin/p/7909911.html
Copyright © 2020-2023  润新知