LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭
php使用curl自定义header参数
toice 2022-03-15

testCurl.php


<?php

/* 

 * 学习笔记


1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST


2,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA


3, 只有Coentent-Type为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。


4,只有Content-Type为application/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。


5,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini


6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。

7,自定义头参数及获取:

7-1 自定义的参数,$_SERVER中会自动拼接上HTTP_前缀转化为大写跟下划线。header头里的参数如果有下划线nginx会收不到;

7-2 自定义带下划线的参数.如果使用nginx,header头里的参数如果有下划线(如:client_secret),使用$_SERVER接收不到,需配置nginx.conf,在里面添加 underscores_in_headers on;


*/



$url = "https://test.com/curl/getCurl.php";

$jsonArr = array('accountid' => '34', 'option' => 'chat_index');

$jsonStr = json_encode($jsonArr);

//设置了Content-Type: application/json,传参要转化为JSON,否则后台接收不到数据

//自定义的参数,$_SERVER中会自动拼接上HTTP_前缀转化为大写跟下划线。header头里的参数如果有下划线nginx会收不到;

$headerData = array(

    "Content-Type: application/json",//file_get_contents('php://input')可读取application/x-www-form-urlencoded和application/json等请求类型,但无法读取Content-Type不为multipart/form-data的数据

    "Content-Length: " . strlen($jsonStr) . "",

    "Accept: application/json",

    "private_token:tokenaaaaaaaaaa1232131",

    "token_id:5K8264ILTKCH16CQ2502SI8ZNMTM67VS",//自定义带下划线的参数.如果使用nginx,header头里的参数如果有下划线(如:client_secret),使用$_SERVER接收不到,需配置nginx.conf,在里面添加 underscores_in_headers on;

    "client-id:5K8264ILTKCH16CQ2502SI8ZNMTM67VS",//自定义参数

    "client-secret:C380BEC2BFD727A4B6845133519F3AD6"//自定义参数

);

$data = curlRequest($url,$jsonStr,$headerData);

var_dump($data);


function curlRequest($url,$data=null,$header=null){

    //初始化浏览器  

    $ch = curl_init();

    

    //设置浏览器,把参数url传到浏览器的设置当中  

    curl_setopt($ch, CURLOPT_URL, $url);

    

    //以字符串形式返回到浏览器当中  

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    

    //禁止https协议验证域名,0就是禁止验证域名且兼容php5.6  

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

    

    //禁止https协议验证ssl安全认证证书  

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    

    //判断data是否有数据,如果有data数据传入那么就把curl的请求方式设置为POST请求方式  

    if ( !empty($data) ) {

        //设置POST请求方式

        curl_setopt($ch, CURLOPT_POST, true);

        

        //设置POST的数据包    

        @curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    }

    

    //设置header头  

    if ( !empty($header) ) {

        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    }

    

    //让curl发起请求

    $str = curl_exec($ch);

    

    //关闭curl浏览器

    curl_close($ch);

    

    //把请求回来的数据返回

    return $str;

}

getCurl.php

<?php


/** * 获取自定义的header数据 */

//在PHP中所有的header中的自定义信息都会被加上HTTP_的开头,在获取的时候参数名称无论大小写全部转换成大写!

function get_all_headers(){

    // 忽略获取的header数据

    $ignore = array('host','accept','content-length','content-type','connection');

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

}


$data = file_get_contents('php://input');


$headers = get_all_headers();

file_put_contents('curl.txt', print_r($_SERVER,true), FILE_APPEND);

echo $data;

exit;

?>

curl.txt日志文件如下:

Array

(

    [private-token] => tokenaaaaaaaaaa1232131

    [token-id] => 5K8264ILTKCH16CQ2502SI8ZNMTM67VS

    [client-id] => 5K8264ILTKCH16CQ2502SI8ZNMTM67VS

    [client-secret] => C380BEC2BFD727A4B6845133519F3AD6

)








推荐文章
评论(0)
联系我们|招贤纳士|移动客户端|风格模板|官方博客|侵权投诉 Reporting Infringements|未成年人有害信息举报 0571-89852053|涉企举报专区
网易公司版权所有 ©1997-2024  浙公网安备 33010802010186号 浙ICP备16011220号-11 增值电信业务经营许可证:浙B2-20160599
网络文化经营许可证: 浙网文[2022]1208-054号 自营经营者信息 工业和信息化部备案管理系统网站 12318全国文化市场举报网站
网信算备330108093980202220015号 网信算备330108093980204230011号
分享到
转载我的主页