zoukankan      html  css  js  c++  java
  • 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
    )
  • 相关阅读:
    Android 主题theme说明 摘记
    Android开发 去掉标题栏方法 摘记
    安卓项目五子棋代码详解(二)
    关于 ake sure class name exists, is public, and has an empty constructor that is public
    百度地图3.0实现图文并茂的覆盖物
    android onSaveInstanceState()及其配对方法。
    关于集成科大讯飞语音识别的 一个问题总结
    android 关于 webview 控制其它view的显示 以及更改view数据失败的问题总结
    C# 解析 json Newtonsoft果然强大,代码写的真好
    c#数据类型 与sql的对应关系 以及 取值范围
  • 原文地址:https://www.cnblogs.com/jdwang-admin/p/7909911.html
Copyright © 2011-2022 走看看