方法一(若为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

 

 

通过 curl 传递数据的更多相关文章

  1. php curl 传递数据

    <?php header("Content-type: text/html; charset=utf-8"); /** * curl 传递数据 */ class curl { ...

  2. GET来传递数据的实例

    实例 下面实例是一点典型的使用GET来传递数据的实例: 客户端请求: GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 Op ...

  3. Android中Service通信(一)——启动Service并传递数据

    启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...

  4. angular input标签只能单向传递数据的问题

    angularjs input标签只能单向传递数据的问题 <ion-view title = "{{roomName}}" style = "height:90%; ...

  5. activity与fragment之间传递数据

    总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数. 1.Fra ...

  6. android跟服务器使用json传递数据

    最近在做项目,使用了json传递数据,把服务器对象转换成json字符串返回,android使用gson包解析json字符串变成对象. 1.服务器代码编写,我这边是在servlet里面 Peron pe ...

  7. 小菜学习Winform(五)窗体间传递数据

    前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...

  8. Intent(三)向下一个活动传递数据

    向下传递活动很简单,可以我采用putExtra()方法的重载,把我们想要传递的数据暂时放在intent中,启动活动时从这里取就可以了. 首先我们在MainActivity(主活动)显式声明intent ...

  9. MVC学习系列3--怎么从控制器向视图传递数据

    在MVC中,从控制器到视图,传递数据,可以使用 ViewData 和 ViewBag:同样从视图到控制器,传递数据,可以使用Post,QueryString,或者隐藏域:最后从控制器到控制器,传递数据 ...

随机推荐

  1. UIDebuggingInformationOverlay 调试

    https://archimboldi.me/posts/%E7%BF%BB%E8%AF%91-uidebugginginformationoverlay.html http://ryanipete. ...

  2. 泛微云桥e-Bridge安装手册

    有时候不看官方文档进行配置,可能会出现奇奇怪怪的问题,SO转载一下官方文档,顺带学习. 想超长体验此软件,请搜索本博客内容,有破解方法,仅用来学习使用,顺带进行二次开发,请勿使用在商业用途,谢谢. 泛 ...

  3. 小改造gotty,使之适合接收经过一层加密的URL

    当然,比起密码设置,这个安全性也不是特别高, 但比起直接传参数. 还是要专业一些的. 其实现思路分两种: 第一种是在gotty.js之内加入解url的函数. 第二种在是go源代码时,加入同等的解密函数 ...

  4. C#学习-析构函数

    析构函数用于在类销毁之前释放类实例所使用的托管和非托管资源. 对于C#应用程序所创建的大多数对象,可以依靠.NET Framework的垃圾回收器(GC)来隐式地执行内存管理任务. 但是,若创建封装了 ...

  5. 无法连接ssh,fatal: daemon() failed: No such device

    今天发现一个服务器的sshd无法启动,查看/var/log/secure里发现:fatal: daemon() failed: No such device 解决办法: rm /dev/null /d ...

  6. python全栈开发day66-视图系统、路由系统

    一.昨日内容回顾 1. tags 1. for循环 {% for name in name_list %} {{ name }} {% endfor %} {% for name in name_li ...

  7. 【转】Android 模拟器横屏竖屏切换设置

    http://blog.csdn.net/zanfeng/article/details/18355305# Android 模拟器横屏竖屏切换设置时间:2012-07-04   来源:设计与开发   ...

  8. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-3项目架构说明

    本文目录1. 摘要2. 框架介绍 3. 权限管理之多一点说明4. 总结 1.  摘要 NCMVC角色权限管理框架是由最近练习Net Core时抽时间整理的系统,后续能不能发展成一个cms还要看朋友们是 ...

  9. Codeforces 803G Periodic RMQ Problem 线段树

    Periodic RMQ Problem 动态开点线段树直接搞, 我把它分成两部分, 一部分是原来树上的, 一部分是后来染上去的,两个部分取最小值. 感觉有点难写.. #include<bits ...

  10. ELK 环境搭建3-Logstash

    一.Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件或者中间件. 二.搭建 1.因为要涉及到收 ...