项目应用的时候经常要和底层应用数据交互,php的curl函数使用非常频繁,于是自己写了1个比较适用的cUrl函数;
特点:
1. 默认采用POST方式提交请求,可通过附加参数设置请求类型;
2.可通过附加参数设置请求的数据类型(即header部分的content_type)为json或text,默认为text;
3.可通过附加参数设置请求时是否带session;
样例:标准请求:http_cUrl($url,array[]);
用get方式请求:http_cUrl($url,array[],['method'=>'GET']);
用json字符串形式发送请求的数据:http_cUrl($url,array[],['cType'=>'JSON']);
用带session请求:http_cUrl($url,array[],['withSession'=>1]);
全参数样例: http_cUrl($url,['userName'=>'testuser','pswd'=>md5('mypswd')],['method'=>'GET','cType'=>'JSON','withSession'=>1]);
/*================================http_cUrl函数====================================
* @author Mickeywaugh@qq.com* @copyright Mickeywaugh@qq.com
* @version [V0.1] ;
* @date 2017-09-04;
* @param [String] $url [必须] [请求地址];
* @param [Array] $data [可选] [请求的参数];
* @param [Array] ...$agrs[可选] [其它参数数组]; $args['method']:请求参数的发送方式,值为POST/GET,默认为POST; $args['cType']:头部Content-Type,值为json 或text,默认为text,$args['withSession']:是否带ssession,1/0,1为带session请求;
eg:[0=>'POST',1=>'json',2=>1]
* @return [Array/text] [如果服务器返回为json字符串,则将字符串转换为数组,否则返回contect_text];
==========================================================================*/
function http_cUrl($url,$data=null,...$args){
$method=$args[0]['method']?:'POST';
$Content_type=$args[0]['cType']?:'text';
$withSession=$args[0]['withSession']?1:0;
$curl = curl_init(); //初始化curl
if(strtolower($Content_type)=='json'){
$data=json_encode($data);//将data数组转换为json串来发送
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length:' . strlen($data)) );
}else{
$data = is_array( $data ) ? http_build_query( $data ) : $data;
}
if (strtoupper($method)=='GET') { // 如果 输入方式为GET,则用GET方式发送请求数据
$url=$url.'?'.$data; //GET方式将参数放在url后面;
}else{ //否则用POST方式
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $data );
}
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, $method );
if ( $withSession ) {
session_start();
$strCookie = "PHPSESSID=" . $_COOKIE[ 'PHPSESSID' ];
session_write_close();
curl_setopt( $curl, CURLOPT_COOKIE, $strCookie );
}
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HEADER, 0 );
curl_setopt( $curl, CURLOPT_URL, $url );
$output = curl_exec( $curl ); //获取采集结果
curl_close( $curl ); //关闭cURL链接
$json = json_decode( $output, true ); //解析json
if ( is_null( $json ) ) { //判断json还是xml
return $output; //如果不是json,则直接返回输出 内容;
} else {
return $json; //如果为json,则返回json;
}
}