php-curl(模拟post,设置header,接收json数据)_php curl post header_梁吉林的博客-程序员宅基地

技术标签: curl-post  php-curl  curl设置头信息  curl-json  PHP  curl接收json  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ljl890705/article/details/52219565

智能推荐

180523 安卓-DDCTF(详细复现版)-程序员宅基地

Hello Baby Dexjeb反编译发现不少第三方库,其中一个com.meituan.robust包搜索一下可以发现是美团开发的一个开源热更新框架 参照使用教程可以发现补丁的位置在PatchExecutor类调用的PatchManipulateImp类中的fetchPatchList方法中调用的setLocalPath方法处设置 于是跟着去找 cn.chaitin.geektan.c...

快速读书的方法_关键词排名认可q火17星热情-程序员宅基地

吸收:带问题阅读。主题式阅读。巧用热情万事开头难,因为从不了解到了解基本的一些事实,是一个新知识暴涨的阶段,这个时候的困难是最大的。有人熬不过去,觉得困难太大就放弃了。不过,狂热的兴趣可以抵消对困难的感觉,所以趁着对一件事情有热情的时候,开一个好头是很重要的。(当然,这并不是说持之以恒就不重要了)。当然,也许这个是因人而异的,对我来说我会在对一件事情有浓厚兴趣的时候非常专注地学习,把..._关键词排名认可q火17星热情

C语言的基础知识一_每个人的代码都不一样吗-程序员宅基地

C语言的一些基础东西,顺道复习一下_每个人的代码都不一样吗

利用指针及数组对国家名称按字典排序-程序员宅基地

/*************************利用指针及数组对国家名称按字典排序**********************/#include #include #define MAX_LEN 10 //字符串最大长度#define N 150 //字符串个数void SortString(char *ptr[],int n

linux查找文件,搜索字段_linux 搜索字段_yun382657988的博客-程序员宅基地

查找文件用法:find [寻找的目录] [表示式]find xxx -name “xxx”搜索字段用法:grep [-选项] [字串] [文件名]grep -i “xxx”参考链接:Linux下查找\命令(收集整理)_Jokey92的博客-程序员宅基地_linux 搜索命令..._linux 搜索字段

Android教程 -04 启动其它Activity,静态工厂设计模式传递数据_activity遵循什么设计模式-程序员宅基地

意图 Intent一个应用程序肯定不只有一个界面,如何切换到其它界面,只时候就需要启动其它的Activity。启动Activity有多种方式。我在这简单总结下:学习开启其它的Activity,首先需要了解意图: Intent是在不同组件中(比如两个Activity)提供运行时绑定的对象。Intent代表一个应用”想去做什么事”,你可以用它做各种各样的任务,不过大部分的时候他们被用来启动另一个Act_activity遵循什么设计模式

随便推点

从0开始制作H5直播源码的教程_腾讯云电商直播h5 源码-程序员宅基地

本文为转载文章,原作者由于公司需要开发一款直播软件,以前也并没有接触过直播这一方面,所以就来从0开始做一个直播,本着开放的原则,发此博文以供后者参阅,视频流服务使用阿里云,H5直播源码。视频直播服务提供商的选择:在选择视频直播提供商的时候,目标选择有三家:七牛云、腾讯云与阿里云。由于七牛云以及腾讯云的视频直播需要审核,而且审核速度较慢,本次选择的是阿里云提供的视频直播的服务。视频直播的原理:..._腾讯云电商直播h5 源码

直播平台源代码即时通讯音技术——实时语音通讯丢包补偿技术详解_云豹科技官方的博客-程序员宅基地

内容概述现如今,随着移动互联网越来越普及,直播平台源代码搭建过程中关于实时语音通讯应用越来越重要,但因网络状况及相关因素的影响,实时语音通讯的丢包问题在所难免,与视频不同,语音丢包处理不佳,会让通话双方体验非常糟糕。好在已经有越来越成熟的丢包补偿技术。丢包补偿技术可以分为两类:基于发送端补偿和基于接受端补偿。基于发送端补偿包括前向差错纠正、交织和重传技术;基于接受端补偿包括了多种错误隐蔽算法。基于发送端的丢包补偿技术原理1简述基于发送端补偿可以分为两类:主动重传(本文不讨论)和被.

Xilinx FPGA中RS编码IP核之Generator Start_fpga rs编码-程序员宅基地

前一阵子,学习如何调用ISE中RS编码的IP核,进行信息序列的编码,多亏了有现成的IP核,大大减轻了工作量,于是便翻起了RS编码的Datasheet,发现用起来还蛮简单的,直到编了一段代码测试完,发现编码后的符号和MATLAB中RS编码函数输出的结果不一样,找了一天没发现两种结果不一致的原因出现在哪,直到对RS码的编码过程做了一点了解之后,才找到了原因。1. RS编码简介..._fpga rs编码

Java的数组(Array)、Vector、ArrayList、HashMap的异同_arraylsit和数组同样的访问效率-程序员宅基地

array(数组)和vector是十分相似的java构件(constructs),两者全然不同,在选择使用时应根据各自的功能来确定。 1、数组:java arrays的元素个数不能下标越界,从很大程度上保证了java程序的安全性,而其他一些语言出现这一问题时常导致灾难性的后果。 array可以存放object和基本数据类型,但创建时必须指定数组的大小,并不能再改变。值得注意的是:当array中的某一元素存放的是objrct reference 时,java不会调用默认的构造函数,而是将其初值设为_arraylsit和数组同样的访问效率

直播软件搭建技术原理:CDN 与直播-程序员宅基地

直播软件搭建技术原理:CDN 与直播很多直播都是基于 CDN 来实现的。而通过声网的服务,或基于声网SDK与 CDN 结合,还可以实现在直播中的连麦互动、白板同步等强调实时性的场景。本文源自社区投稿,介绍了该场景下的一些基础知识。如大家存有疑问,可以与作者交流。对于直播业务场景,大家遇到问题时候获得的第一现场大多数都是从CDN观众端感受到,比如拉流发现主播卡了,有杂音,模糊,不出图等一类现象。在排查这类问题时候,其实从范围上讲,我们需要从两部分去排查。我们实时音视频云结合CDN直播构建的场景如下

php统计今日人数,php 统计在线人数,今日访问量,总访问量-程序员宅基地

直接复制到本站点下测试即可代码如下:$entry = explode(",",trim($entries[$i]));if (($entry[0] != $_SERVER["REMOTE_ADDR"]) && ($entry[1] > time())) {array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,..._php今日访本问pv

推荐文章

热门文章

相关标签