本文转自:https://blog.csdn.net/pangchengyong0724/article/details/52103962

本地模拟请求服务器数据,请求数据格式为json,服务器返回数据也是json. 由于需求特殊性, 如同步客户端的批量数据至云端, 提交至服务器的数据可能是多维数组数据了. 这时需要将此数据以一定的数据编码方式(json格式)来组织并提交.以便服务器很好地处理.

客户端curl模拟提交代码.

function http($url, $data = NULL, $json = false)
{
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 if (!empty($data)) {
  if($json && is_array($data)){
    $data = json_encode( $data );
  }
  curl_setopt($curl, CURLOPT_POST, 1);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  if($json){ //发送JSON数据
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_HTTPHEADER,
      array(
        'Content-Type: application/json; charset=utf-8',
        'Content-Length:' . strlen($data))
    );
  }
 }
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $res = curl_exec($curl);
 $errorno = curl_errno($curl);  if ($errorno) {
   return array('errorno' => false, 'errmsg' => $errorno);
 }
 curl_close($curl);
 return json_decode($res, true);
}

参数说明: 
url:服务器接收处理urlurl:服务器接收处理urldata: 数组形式的post数据 
$json: 是否以json方式提交(1: 是, 0:否)

服务器端获取post数据代码:

print_r($_POST); 
最后获取到的数据是空值.

上网搜索了一下发现PHP默认只识别application/x-www.form-urlencoded标准的数据类型,修改头信息也没有结果…只能通过以下方式获得数据

//第一种方法
$post = $GLOBALS[‘HTTP_RAW_POST_DATA’];
//第二种方法
$post = file_get_contents(“php://input”);

最后修改后,数据才能接收到

[转]php中 curl模拟post发送json并接收json的更多相关文章

  1. php中 curl模拟post发送json并接收json(转)

    本地模拟请求服务器数据,请求数据格式为json,服务器返回数据也是json. 由于需求特殊性, 如同步客户端的批量数据至云端, 提交至服务器的数据可能是多维数组数据了.  这时需要将此数据以一定的数据 ...

  2. PHP中curl模拟post上传及接收文件

    public function Action_Upload(){ $this->path_config(); exit(); $furl="@d:\develop\JMFramewor ...

  3. php使用curl模拟多线程发送请求

    每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求.php的curl多线程是通过不断调用curl_multi_e ...

  4. php中curl模拟post提交多维数组(转载)

    原文地址:http://www.cnblogs.com/mingaixin/archive/2012/11/09/2763265.html 今天需要用curl模拟post提交参数,请求同事提供的一个接 ...

  5. php中curl模拟浏览器来传输数据

    cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...

  6. curl模拟http发送get或post接口测试

    一.get请求 curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http:// ...

  7. php中curl和fsockopen发送远程数据的应用

    最近要用到通过post上传文件,网上盛传的有curl的post提交和fsockopen,其中curl最简单,于是从最简单的说起. 这是简单的将一个变量post到另外一个页面 $url = ''; $d ...

  8. curl模拟多线程

    1.curl发送请求的请求的基本思路 打开会话 设置会话参数 发送请求 关闭句柄 2.curl单进程发送示例 <?php //请求链接 $arr = [ 'https://www.yahoo.c ...

  9. Ajax接收json响应

    json?  Json和xml比较  Ajax如何使用JSON  Ajax接收json响应案例 什么是json?JSON (JavaScript Object Notation) 是一种轻量级的 ...

随机推荐

  1. windows下qt的.exe的dll文件怎么配齐

    用qt自带的windeploy工具即可 win键打开开始菜单 找到qt目录下的qt for desktop(mingw)并打开 qtcreater或者vs打开要部署的项目,构建成release模式,运 ...

  2. hbase删除table时,显示table不存在

    hbase删除table时,显示table不存在,但是创建table时,显示table存在. 解决方案: 清空zookeeper数据.(重新安装zookeeper)

  3. Docker构建其它组件

    构建mysql 运行centos7容器 docker run --privileged -dti --name=centos-container centos:7 /usr/sbin/init 查询c ...

  4. POM文件详解(2)

    1      项目构建 <!-- 构建项目需要的信息 --> <build> <!-- 子项目可以引用的默认插件信息.该插件配置项直到被引用时才会被解析或绑定到生命周期. ...

  5. Mimikatz 法国神器

    0x00 标准模块 Module : standardFull name : Standard moduleDescription : Basic commands (does not require ...

  6. [转]SDN与OpenFlow技术简介

    http://blog.163.com/s_zhchluo/blog/static/15014708201411144727961/ 本文是2012年文章,对Openflow的发展.规范.应用和SDN ...

  7. Jenkins 定时构建语法规则

    1.Jenkins自由风格任务定时构建 2.语法规则 定时构建语法 * * * * * 第一个*表示分钟,取值0~59 第二个*表示小时,取值0~23 第三个*表示一个月的第几天,取值1~31 第四个 ...

  8. linux下 几个常用makefile模板,亲测可用

    一 生成动态链接库的模板: ####################### # Makefile ####################### # compile and lib parameter ...

  9. vue好用的图片查看器(v-viewer插件)

    在开发中,经常会遇到这样的需求,就是点击图片,能够放大预览.在网上找到了一款很好用的插件.拿来即用,不需要复杂的配置.特此记录下(这里只是针对于在vue脚手架下的使用方法). 1.安装依赖包. npm ...

  10. Source Qualifter组件中sqlquery过长导致截取

    问题:Source Qualifter组件中sqlquery过长导致截取原因:Source Qualifter组件中sqlquery可以接受的最长字符数是32767个字符,超过这个数字会导致截取解决方 ...