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

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/ljl890705/article/details/52219565

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数据。

展开阅读全文

没有更多推荐了,返回首页