php-curl(模拟post,设置header,接收json数据)

    xiaoxiao2026-04-06  7

    CURL模拟POST请求

    curl可以使用url的方式来模拟浏览器传输数据,是很有用的一个功能。

    curl的操作可以分为4步:

    1、初始化:curl_init() 2、设置属性值:curl_setopt() 3、执行:curl_exec() 4、退出关闭:curl_close()

    测试: 模拟一个php文件(2.php)向另一个php文件(3.php)发送post请求,并接收其返回值进行输出的过程。

    post发送方(2.php)

    <?php $url = 'http://localhost/3.php'; $opt_data = 'name=BY2&age=999&sex=MAXMAN'; $curl = curl_init(); //初始化 curl_setopt($curl,CURLOPT_URL,$url); //设置url curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC); //设置http验证方法 curl_setopt($curl,CURLOPT_HEADER,0); //设置头信息 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); //设置curl_exec获取的信息的返回方式 curl_setopt($curl,CURLOPT_POST,1); //设置发送方式为post请求 curl_setopt($curl,CURLOPT_POSTFIELDS,$opt_data); //设置post的数据 $result = curl_exec($curl); if($result === false){ echo curl_errno($curl); exit(); } print_r($result); curl_close($curl); ?>

    post接收方(3.php)

    <?php $name = $_POST['name']; $age = $_POST['age']; $sex = $_POST['sex']; if(empty($name) || empty($age) || empty($sex)){ return 'post value is empty'; } $str = '欢迎来到北京,'.$name; $str .= ',你今年'.$age.'岁,真长寿'; $str .= ',你是个强壮的'.$sex; echo $str;

    测试验证时,如果出现错误,会打印错误信息。 如果测试过程中没有出现错误,会打印如下信息:

    欢迎来到北京,BY2,你今年999岁,真长寿,你是个强壮的MAXMAN

    curl中有一个方法curl_getinfo(),可以用来获取一些有用的信息,将这个方法加入到2.php中:

    //插入到这个位置即可 print_r($result); $info = curl_getinfo($curl); print_r($info); curl_close($curl);

    再看一下现在的运行结果已经获取到了许多有用的信息:

    欢迎来到北京,BY2,你今年999岁,真长寿,你是个强壮的MAXMAN Array ( [url] => http://localhost/3.php [content_type] => text/html [http_code] => 200 [header_size] => 169 [request_size] => 150 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 27 [size_download] => 75 [speed_download] => 75 [speed_upload] => 27 [download_content_length] => 75 [upload_content_length] => 27 [starttransfer_time] => 0 [redirect_time] => 0 [certinfo] => Array ( ) [redirect_url] => )

    Comments:如果浏览器显示乱码,“自定义及控制”->”更多工具”->”编码”->修改编码方式即可(chrome)。

    CURL设置Authorization头信息&发送接收JSON数据

    相关的部份代码片段:

    $opt_data = json_encode($data); $header = array(); $header[] = 'Authorization:'.$tmp; $header[] = 'Accept:application/json'; $header[] = 'Content-Type:application/json;charset=utf-8'; $curl = curl_init(); //初始化 curl_setopt($curl,CURLOPT_URL,$url); //设置url curl_setopt($curl,CURLOPT_HTTPHEADER,$header); curl_setopt($curl,CURLOPT_POSTFIELDS,$opt_data);

    在接收端,发现使用 POST _REQUEST也是一样,那么我们传的JSON数据哪里去了呢?怎么才能接收到传递的JSON数据?

    使用如下方法: $GLOBALS['HTTP_RAW_POST_DATA'];

    为什么会出现POST获取不到传送的数据的问题呢?因为$_POST只能接收文档类型为“Content-Type: application/x-www-form-urlencoded”格式提交的数据。 HTTP_RAW_POST_DATA是用来接收原始的POST数据的,只有在碰到未识别的MIME类型时才会被填充,所以使用它可以获取到上面代码POST的json数据。

    转载请注明原文地址: https://ju.6miu.com/read-1308545.html
    最新回复(0)