PHP 传输会话curl函数的实例详解
PHP传输会话curl函数的实例详解
前言:
接手公司项目PC端负责人的重担,责任担当重大;从需求分析,画流程图,建表,编码,测试修bug,上线维护等我一个光杆司令一人完成(当然还有一个技术不错的前端配合,感谢主管的帮助),虽然累点加班多点但感觉还行吧,公司都是一个鸟样。
闲话不多说了,因为项目中经常需要调取java那边的接口,既然涉及到请求接口那就有了http的请求方式,PHP常见的是GET/POST两种当然还有其他的比如put等,java那边经常用到GET/POST/PUT/DELETE等方式,请求接口当然要用到curl的相关函数了,都是看文档调试的希望大家都看文档,下面是我封装好的相关函数等(大概总结下,已调通):
示例代码:
private$serverhost="https://demo.xxx.cn";//测试 /** *请求接口封装get/post/put/delete等 *accesspublic *@paramstring$url接口地址 *@paramstring$params参数 *@paramstring$type类型get/post/put/delete *@returnbool/array */ publicfunctiongetcurldata($url,$params,$type="get"){ $url=$this->serverhost.$url; $response=array(); if($type=='get'){//get请求 //请求头可以加其他设置 $headers=array( 'Content-type:application/json;charset=UTF-8', ); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); $response=curl_exec($ch); }elseif($type=='post'){//post请求 $headers=array( 'Content-type:application/json;charset=UTF-8', ); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_POST,true);//注意这几行 curl_setopt($ch,CURLOPT_POSTFIELDS,$params);//注意这几行 //curl_setopt($ch,CURLOPT_HEADER,true); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); $response=curl_exec($ch); }elseif($type=='put'){//put请求 $headers=array( 'Content-type:application/json;charset=UTF-8', ); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_PUT,true);//注意这几行 curl_setopt($ch,CURLOPT_POSTFIELDS,$params); //curl_setopt($ch,CURLOPT_HEADER,true); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); $response=curl_exec($ch); } return$response; } //如何调用上面代码 //get方式 /** *查询我创建过的班级 *@paramstring$url接口地址 *@paramstring$params参数 *@paramstring$type类型get *@returnarray */ publicfunctionmycreateclass($userid){ $url="/xxx/xxxx/xxxx/".$userid;//请求地址拼接 $response=$this->getcurldata($url,array(),"get"); $createdclass=json_decode($response,true);//返回json格式数据 return$createdclass; } /**post方式请求 *用户登录判断 *accesspublic *@paramstring$username用户名 *@paramstring$password密码 *@returnbool */ publicfunctiongetlogin($username,$password) { //要post的数据 $params=array( "username"=>$username, "password"=>$password ); $params=json_encode($params,64|256); $uri="/xxx/xxx/login"; $response=$this->getcurldata($uri,$params,"post"); $result=json_decode($response,true); return$result; } /*身份转换--put请求 */ publicfunctionchangeuserole($token){ //要put的数据 $params=array(); $params=json_encode($params,64|256); $uri="/xxx/xxx/xxx/".$token."/"; $response=$this->getcurldata($uri,$params,"put"); $result=json_decode($response,true); //dump($result);die; return$result; } //还有一个delete方式大家自己参考文档调试下吧 上面3个请求方式都是单次请求(即请求一次)*************** PHP自带函数curl_multi_get_contents函数(thinkphp自带此函数,可以微调下): /** *批量发起请求已调通 *curlmultiPOST数据 **/ publicfunctioncurl_multi_get_contents($url=array(),$param=array(),$timeout=1000){ $userAgent='Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1)'; $headers=array( 'Content-type:application/json;charset=UTF-8', ); $curl_array=array(); $mh=curl_multi_init(); foreach($urlas$uk=>$uv){ $curl_array[$uk]=curl_init(); } unset($uk,$uv); foreach($urlas$uk=>$uv){ $options=array( CURLOPT_URL=>$uv, CURLOPT_TIMEOUT=>$timeout, CURLOPT_RETURNTRANSFER=>true, CURLOPT_DNS_CACHE_TIMEOUT=>86400, CURLOPT_DNS_USE_GLOBAL_CACHE=>true, CURLOPT_SSL_VERIFYPEER=>0, CURLOPT_HEADER=>false, CURLOPT_USERAGENT=>'Mozilla/4.0(compatible;MSIE5.01;WindowsNT5.0)', CURLOPT_HTTPHEADER=>$headers, ); if(isset($param[$uk])){ foreach($param[$uk]as$_k=>$_v){ //$options[$_k]=$_v; $optionsparam[$_k]=$_v; $options[CURLOPT_POSTFIELDS]=json_encode($optionsparam,64|256); } } curl_setopt_array($curl_array[$uk],$options); curl_multi_add_handle($mh,$curl_array[$uk]); unset($options); } unset($uk,$uv); $running=NULL; do{ curl_multi_exec($mh,$running); }while($running>0); $res=array(); foreach($urlas$uk=>$uv){ $res[$uk]=curl_multi_getcontent($curl_array[$uk]); } unset($uk,$uv); foreach($urlas$uk=>$uv){ curl_multi_remove_handle($mh,$curl_array[$uk]); } unset($url,$curl_array,$uk,$uv); curl_multi_close($mh); return$res; } //如何调用--批量发起请求 //批量请求加入班级 publicfunctionbatchjoinclass($token,$batchjoinclass){ $urlarr=$param=$returndata=array(); $param=$batchjoinclass;//二维数组格式如下 /* $param[1]['name']='班级新1'; $param[1]['iamge']='xxx11.png'; $param[1]['iamgeType']='CUSTOM'; $param[2]['name']='班级新2'; $param[2]['iamge']='xxx.png'; $param[2]['iamgeType']='CUSTOM'; */ //获取请求url foreach($batchjoinclassas$key=>$val){ $urlarr[$key]=$this->serverhost."/xxx/xxxx/xxxx/".$token; } $res=$this->curl_multi_get_contents($urlarr,$param); //格式化返回数据 foreach($resas$key=>$val){ $returndata[$key]=json_decode($val,true); } return$returndata; }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!