PHP 中的 curl 函数发送 Post 请求应该注意的几点
public function http_request( $url, $post = '', $timeout = 5 ){
if( empty( $url ) ){
return ;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
if( $post != '' && !empty( $post ) ){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($post)));
}
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
一开始我并没有留意传递过来的数据是application/json编码的json字符串,我在后台直接用接受application/x-www-form-urlencoded编码格式的数据方式来取传递过来的数据(就是直接用的$_POST方式获取的),结果当然没什么也没有取到了。后来,同事直接改了http_request()方法,直接传递application/x-www-form-urlencoded编码格式的数据过来,我这就没有做更改。
对于上面的问题,我一直纳闷当时为什么没有拿到传递过来的数据。今天项目基本完工,研究了以下。
<pphp中的curl()函数进行post请求的时候,传递数据的格式可以有以下几种方式:
(1):由参数拼接而成的key=>value键值对字符串。形如以下: name=xxx&age=23$sex=1
这种请求参数默认是按照application/x-www-form-urlencoded进行编码的。
(2):由参数组成的key=>value键值对数组(只能是一维数组,更高维度的数组会报错)。形如以下格式:
[ name="xxx" , age = 23 , sex = 男 ]
这种请求参数默认是按照multipart/form-data格式进行编码的。
上面说了,curl()进行post请求的时候,只能传递一维数组作为传递的参数,那么如果想要传递多维数组需要怎么处理那?有两种方式可以来处理,分别是下面的方式3以及方式4。
(3):将多维数组进行http_build_query()进行处理,等到一个key=>value键值对格式的字符串。如下面所示:
$data = [ "msg"=>"这是一条测试数据", "xxx" => "yyyy", "msg_data" => [ "name"=>"sunms", "age"=>23, "sex"=>"男", "content"=>[ 1,2,3 ] ], ];
将得到以下的字符串:
msg=这是一条测试数据&xxx=yyyy&msg_data[name]=sunms&msg_data[age]=23&msg_data[sex]=男&msg_data[content][0]=1&msg_data[content][1]=2&msg_data[content][2]=3
这种方式也是通过application/x-www-form-urlencoded进行编码的,在接收方可以通过$_POST直接获取。
(4):将多维数组转换为json格式的字符串,对字符串进行application/json格式编码,在接收方通过file_get_contents(“php://input”)或者$GLOBALS[‘HTTP_RAW_POST_DATA’]的方式获取传递过来的json格式的字符串,然后将json格式的字符串转换为数组进行处理。 $data = [];
$data_string = json_encode($data);
.....
//设置header信息
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string))); 注意:对于application/json格式编码的数据,$_POST是不能直接获取的,需要通过file_get_contents(“php://input”)或者$GLOBALS[‘HTTP_RAW_POST_DATA’]的方式获取。
For this tutorial, I am going to go through how to setup your development and production server environments properly for PHP development.
Development environment windows
Without having to install a Windows server, which is quite costly, you can install one of the several third-party applications to which will get your server environment up for you.
Some of these applications are XAMPP and WAMP. And all these third-party applications do the same thing―install Apache, MySQL, and PHP inside the program.
XAMPP is my personal favorite ― which you can download at www.apachefriends.org ― as it is cross-platform. XAMPP stands for cross-platform, Apache, MariaDB, PHP,Perl. When installing XAMPP, it is very straight forward (and just in case you need to know, you can install Laravel with XAMP ) . Just keep hitting next and agree to everything. However, for the development environment ,you need to install the development tools which just changes the php.ini file to allow errors message display. If error messages are not displayed, go to c:xampp/php/ and open the php.ini file, and make sure that everything under error handling and logging (line 463) has been turned on, then restart your Apache server.
PHP 中的 curl 函数发送 Post 请求应该注意的几点的更多相关文章
- PHP使用curl函数实现多种请求(post,get)
PHP使用curl函数实现get,post请求 一.CURL介绍 CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处 ...
- PHP中的CURL函数库
PHP中的CURL函数库(Client URL Library Function) curl_close — 关闭一个curl会话curl_copy_handle — 拷贝一个curl连接资源的所有内 ...
- Linux中使用curl命令发送带参数的get请求和post请求
GET 请求 curl命令 + 请求接口的地址 curl http://**.**.***.**/SeedAgile/SeedApi/querySprintByRequirementNo?parame ...
- Ajax在静态页面中向指定url发送json请求获取返回的json数据
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- PHP中使用raw格式发送POST请求
如果请求的参数格式是原生(raw)的内容,应该如何为程序构造一个POST请求函数呢? function http_post($url, $data_string) { $ch = curl_init( ...
- C# 代码中 计算某个函数 或WebService 请求花费时间
/// 计算请求所花费的时间 System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start( ...
- 採用Android中的httpclient框架发送post请求
/** * 採用httpclientPost请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得 ...
- Android中的httpclient框架发送get请求
/** * 採用httpclientGet请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到 ...
- 使用PHP中的curl发送请求
使用CURL发送请求的基本流程 使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤: 初始化连接句柄: 设置CURL选项: 执行并获取结果: 释放VURL连接句柄. 下面的程序片段是 ...
随机推荐
- Cmp- Linux必学的60个命令
1.作用 cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户. 2.格式 cmp[options] 文件名 3.[options]主要参数 -l: 将字节以 ...
- There is no public key available for the following key IDs:3B4FE6ACC0B21F32
ubuntu 运行完sudo apt-get update之后,提示 W: There is no public key available for the following key IDs: 3B ...
- Swoole协程报错 Uncaught Error: Call to undefined function go()
解决方法, 在PHP.ini中开启短名
- HZOI2019建造游乐园(play)组合数学,欧拉图
题目:https://www.cnblogs.com/Juve/articles/11186805.html(密码是我的一个oj用户名) solution: 反正我是想不出来... 题目大意就是要求出 ...
- Kubernetes集群环境准备
目录 二.准备工作 主机名 IP地址(NAT) 描述 linux-node1.example.com eth0:192.168.56.11 Kubernets Master节点/Etcd节点 li ...
- Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
- vue.js_05_vue.js的过滤器
1.过滤器的定义和使用 实现:将页面的中的单纯替换成,用户传来的文字. 全局过滤器:所有的Vue对象都可以使用 <body> <div id="app"> ...
- bzoj4788: [CERC2016]Bipartite Blanket
2019.1.9交流题,现在看还是不会,,, 如果只有一边,那么Hall定理即可. 两边?分别满足Hall定理,就是合法的! 证明(构造方案): 左集合先任意形成一个合法匹配,单点增量加入右集合和与右 ...
- CentOS7.4 安装JDK 步骤
1.先在官网下载jdk1.8的压缩文件 2.用putty将压缩文件拷到home目录下 3.新建一个/home/jdk1.8目录 : mkdir /home/jdk1.8 4.将压缩文件解压到hom ...
- Python学习之字典--三级菜单
效果图: 实现代码: dic = { '人物':{ '帽子':{'前年玄铁帽'}, '武器':{'屠龙宝刀'} }, '属性':{ '力量':{35}, '敏捷':{66} }, '任务':{ '主线 ...