通过 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