方法一(若为post方式,只适用于一维数组)

    /**
* curl发送htpp请求
* 可以发送https,http,get方式,post方式,post数据发送
*/
public function dataRequest($url,$https=false,$method='get',$data=null)
{
//初始化curl
$ch = curl_init($url);
//字符串不直接输出,进行一个变量的存储
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//https请求
if ($https === true) {
//确保https请求能够请求成功
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
}
//post请求
if ($method == 'post') {
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
//发送请求
$str = curl_exec($ch);
$aStatus = curl_getinfo($ch);
//关闭连接
curl_close($ch);
if(intval($aStatus["http_code"])==200){
return json_decode($str);
}else{
return false;
}
}

方法二(若为post方式,适用于二维数组)

/**
* @Purpose : curl发送htpp请求,可以发送https,http,get方式,post方式,post数据发送
* @Author : Chrdai
* @Method Name : SendDataByCurl()
* @parameter : string $url 传送的 url
* boolean $https 是否使用 https
* string $method 传递方法
* array $data 数据
* @return : 成功返回对方返回的结果,是非返回 false
*/
function SendDataByCurl($url,$https=false,$method='get',$data=null)
{
// 初始化curl
$ch = curl_init($url);
// 将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// https请求
if ($https === true) {
// 确保https请求能够请求成功
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
}
// post请求
if ($method == 'post') {
     // TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
curl_setopt($ch,CURLOPT_POST,true);
// 所需传的数组用http_bulid_query()函数处理一下,就可以传递二维数组了
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
}
// 发送请求
$str = curl_exec($ch);
$aStatus = curl_getinfo($ch);
// 关闭连接
curl_close($ch);
if(intval($aStatus["http_code"])==200){
return json_decode($str);
}else{
return false;
}
}

方法三(若为post方式,适用于传递 json)

/**
* @Purpose : curl发送htpp请求,可以发送https,http,get方式,post方式,post数据发送
* @Author : Chrdai
* @Method Name : SendDataByCurl()
* @parameter : string $url 传送的 url
* boolean $https 是否使用 https
* string $method 传递方法
* array $jsonStr 需要传递的 json 字符串
* @return : 成功返回对方返回的结果,是非返回 false
*/
function SendDataByCurl($url,$https=false,$method='get',$jsonStr=null)
{
// 初始化curl
$ch = curl_init($url);
// 字符串不直接输出,进行一个变量的存储
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// https请求
if ($https === true) {
// 确保https请求能够请求成功
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
}
// post请求
if ($method == 'post') {
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
// 只需要用个 http 头就能传递 json 啦!
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($jsonStr)
)
);
}
// 发送请求
$str = curl_exec($ch);
$aStatus = curl_getinfo($ch);
// 关闭连接
curl_close($ch);
if(intval($aStatus["http_code"])==200){
return json_decode($str);
}else{
return false;
}
}

方法四:工作中实际使用过,如果上面的都不能成功推送,则可以使用下面这个:

/**
* curl post方法
* @param string $url url链接
* @param string $postfields 要传送的参数
* @param string $path 写日志的路径
* @return 返回的结果
*/
function SendDataByCurl($url,$data){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_POST, true);
$header[] = 'Content-type:application/x-www-form-urlencoded';
curl_setopt($curl, CURLOPT_HTTPHEADER,$header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}

 方法五、需要设置 header 的时候用这个:

/**
* POST方式请求
* @param $url url
* @param array $params params
* @param int $timeout timeout
* @return mixed return responce
*/
function curl_post($url,$params = array(),$header = array(),$timeout=30){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
}
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,is_array($params) ? http_build_query($params) : $params);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$str = curl_exec($ch);
curl_close($ch);
return $str;
}

方法一和方法二可以在 全局表里 $_REQUEST 或者 $_POST 中获取到

方法三可以使用    $params = file_get_contents("php://input");  来获取。

CURL 在php官网的网址:http://www.php.net/manual/en/function.curl-setopt.php

php给java推送 json 格式的数据的时候,假如对方接收的参数叫 rec ,数据是一个叫 data 的的数组,需要这样转换一下,对方才能成功接收到:

$params = json_encode($data);
$postData = "rec=[".$params.']';

本文为 小作者工作中的总结,如有转载请注明出处:http://www.cnblogs.com/chrdai/p/6090188.html

 

 

从API请求数据的方法(主要适用于tp5)的更多相关文章

  1. 前端缓存API请求数据

    1. 背景 在一些项目中,有时候会出现不同模块重复请求大量相同api接口的情况,特别是在一些功能相似的后台管理页面中.以下面这几个页面为例,每次进入页面都需要请求等大量重复的下拉框数据,下拉框数据短时 ...

  2. 封装 jsonp请求数据的方法

    什么是jsonp :  Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不 ...

  3. 配置 influxDB 鉴权及 HTTP API 写数据的方法

    本文简要描述如何为 InfluxDB 开启鉴权和配置用户管理权限(安装后默认不需要登录),以及开启鉴权后如何使用 HTTP API 写数据. 创建 InfluxDB 管理员账号创建 admin 帐号密 ...

  4. 如何实现Echart不刷新页面,多语言切换下的地图数据重新加载,api请求数据加载,soketed数据实时加载

    可视化项目中经常用到ecahrt,各种异步加载,连接socket,多语言切换等问题,现在汇总一下: Ecahrt初始化,全局统一init,可以初始化为0,等待后续数据操作 1.如果是api重新请求,数 ...

  5. 关于ajax请求数据的方法

    $.ajax({  //课程详情信息    type:'get',     data: {'id':courseId},    dataType:'json',        beforeSend : ...

  6. js跨域请求数据的3种常用的方法

    由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript   在 ...

  7. 基于AFNetWorking 3.0封装网络请求数据的类

    对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...

  8. React学习(4)——向服务器请求数据并显示

    本文中涉及到的技术包括:node.js/express服务器的搭建.fetch发送数据请求. 在之前的几篇文章中,介绍了如何搭建基础的React项目,以及一些简单知识,现在,我们还需要掌握如何用Rea ...

  9. angular开发中对请求数据层的封装

    代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...

随机推荐

  1. QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)

    背景: QT在用户关闭窗口(直接点击"X"键)时,程序一般都需要做一些善后的事情,就我现在的程序来说,既关闭USB.如何实现? 正文: 首先,在对应窗体的".h" ...

  2. php综合应用

    php面试题之五--PHP综合应用(高级部分) 五.PHP综合应用 1.写出下列服务的用途和默认端口(新浪网技术部) ftp.ssh.http.telnet.https ftp:File Transf ...

  3. 01WebApi防篡改机制---HMAC机制

    防篡改,顾名思义就是防止有人恶意篡改请求数据URL以达到恶意攻击的目的,那要怎么才能实现这样的目的呢? 很简单,将要请求的数据加上合作号.合作Key按规则组织成一个字符串,获取对应的MD5摘要,然后将 ...

  4. Codeforces Round #340 Watering Flowers

    题目: http://www.codeforces.com/contest/617/problem/C 自己感觉是挺有新意的一个题目, 乍一看挺难得(= =). 其实比较容易想到的一个笨办法就是:分别 ...

  5. 浅谈VBA

    VBA,全称Visual Basic for Applications,其中的一些专业性的解释可以自行搜索,这里就不一一介绍.半年以前,我是不知道VBA的,当我听到VBA的时候,我却迷糊了.VBA是什 ...

  6. 基于jquery的-获取短信验证码-倒计时

    在制作短信验证的时候,需要做一个获取短信按钮,点击后显示倒计时, html代码如下: <input class="gain" type="button" ...

  7. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  8. 2016年11月2日--Window.document对象

    一.找到元素: docunment.getElementById("id"):                      根据id找,最多找一个: var a =docunment ...

  9. 11.5---含有空字符串的字符串查找(CC150)

    注意,1,"" 和 " ".是不同的,空字符串指的是"": 2,注意String的compareTo.小于是指<0.并不是==-1: ...

  10. SQL Sever2008r2 数据库服务各种无法启动的解决办法

    一.Sql Server服务远程过程调用失败解决 以前出现过这个问题,那时候是因为把实例安装在了D盘,后来D盘被格式化了.然后,这些就没了.今天早上打开电脑,竟然又出现这个问题,可是Server200 ...