通过 curl 传递数据
方法一(若为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 传递数据的更多相关文章
- php curl 传递数据
<?php header("Content-type: text/html; charset=utf-8"); /** * curl 传递数据 */ class curl { ...
- GET来传递数据的实例
实例 下面实例是一点典型的使用GET来传递数据的实例: 客户端请求: GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 Op ...
- Android中Service通信(一)——启动Service并传递数据
启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...
- angular input标签只能单向传递数据的问题
angularjs input标签只能单向传递数据的问题 <ion-view title = "{{roomName}}" style = "height:90%; ...
- activity与fragment之间传递数据
总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数. 1.Fra ...
- android跟服务器使用json传递数据
最近在做项目,使用了json传递数据,把服务器对象转换成json字符串返回,android使用gson包解析json字符串变成对象. 1.服务器代码编写,我这边是在servlet里面 Peron pe ...
- 小菜学习Winform(五)窗体间传递数据
前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...
- Intent(三)向下一个活动传递数据
向下传递活动很简单,可以我采用putExtra()方法的重载,把我们想要传递的数据暂时放在intent中,启动活动时从这里取就可以了. 首先我们在MainActivity(主活动)显式声明intent ...
- MVC学习系列3--怎么从控制器向视图传递数据
在MVC中,从控制器到视图,传递数据,可以使用 ViewData 和 ViewBag:同样从视图到控制器,传递数据,可以使用Post,QueryString,或者隐藏域:最后从控制器到控制器,传递数据 ...
随机推荐
- vetur插件提示 [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives错误的解决办法
错误提示: [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives.Renders the ...
- Typora开启行内公式
文件→偏好设置→Markdown,勾选内联公式,重启typora 输入$,按Esc键会自动在后面加上一个$,然后在这两个$之间输入公式.
- [BZOJ4709][JSOI2011]柠檬 决策单调性优化dp
题解: 解法1: 单调栈优化 首先发现一个性质就是 如果当前从i转移比从j转移更加优秀 那么之后就不会从j转移 所以我们考虑利用这个性质 我们要维护一个队列保证前一个超过后一个的时间单调不减 怎么来维 ...
- H.265:网络视频的高清时代
去年八月,爱立信公司推出了首款H.265编解码器,而在仅仅六个月之后,国际电联(ITU)就正式批准通过了HEVC/H.265标准,标准全称为高效视频编码(High Efficiency Video C ...
- 配置windows批处理脚本(.bat)文件路径 | window批处理文件配置执行路径
以PHP的composer为例 1 . 路径D:\phpStudy\php\php-5.5.38加入环境变量 2.在路径D:\phpStudy\php\php-5.5.38新建composer.bat ...
- BZOJ4025 二分图 分治 并查集 二分图 带权并查集按秩合并
原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中 ...
- P1330 封锁阳光大学 DFS
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- Centos7服务器中通过编译源码安装MySQL
基于在Centos7服务器上使用 yum 安装MySQL5.7到默认路径 在修改文件存储位置的时候,折腾了一番没有将成功将datadir修改为我想要的位置 我决定再尝试一下通过编译源码来自定义安装: ...
- TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve
# 23 Batch Normalization import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...
- 003.etcd集群部署-静态发现
一 etcd集群概述 1.1 概述 静态启动etcd集群要求每个成员都知道集群中的另一个成员.Etcd运行在集群的每个coreos节点上,可以保证coreos集群的稳定,可靠的运行.当集群网络出现动荡 ...