当前位置: 首页 > 后端技术 > PHP

打包后的PHP使用curl发送http请求,GET和POST很常见,而且超级好用

时间:2023-03-29 22:13:41 PHP

封装了一个比较完整的curl请求功能。1.兼容get和post。2、内容格式兼容json和x-www-form-urlencoded。3.兼容http和https4.兼容json和xml格式的返回类型,注释写的很详细。有需要的人可以根据评论自定义修改代码,达到想要的效果。环境要求PHP7.0直接上传代码if(!function_exists('curl_request')){/***注:curl发送http请求*用户:温岭*日期时间:2021/9/86:27pm*@paramstring$url请求URL*@parambool$isPost是否为post请求*@paramarray$data请求参数*@paramarray$header请求头说明:请求头要设置成这种格式才能生效['Authorization:0f5fc4730e21048eae936e2eb99de548']*@parambool$isJson是否为json请求,默认为Content-Type:application/x-www-form-urlencoded*@paramint$timeOut超时时间单位秒,0表示永不超时*@returnmixed*/functioncurl_request(string$url,bool$isPost=true,array$data=[],array$header=[],bool$isJson=false,int$timeOut=0):array{if(空($url)){返回假;}//初始化curl$curl=curl_init();//如果curl版本大于7.28.1,则必须为2。7.0版本的php自带curl版本7.40.1。如果你用的是php7以上的,可以保证没有问题。$ssl=(strpos($url,'https')!==false)?2:0;$options=[//设置urlCURLOPT_URL=>$url,//将头文件的信息作为数据流输出CURLOPT_HEADER=>false,//将请求结果作为字符串返回,不要直接输出CURLOPT_RETURNTRANSFER=>true,//禁用cURL验证对端证书CURLOPT_SSL_VERIFYPEER=>false,//identity","deflate","gzip",三种编码方式,如果设置为空字符串,表示支持三种编码方式。出现乱码时,可以设置这个字符串CURLOPT_ENCODING=>'',//设置http版本,HTTP1.1是主流的http版本CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,//连接对方主机时最长等待时间。设置时到10秒,如果对方服务器在10秒内没有响应,就会主动断开连接。如果为0,则服务器响应时间没有限制CURLOPT_CONNECTTIMEOUT=>0,//整个cURL函数执行过程的最长等待时间,也就是说这个时间是CURLOPT_TIMEOUT=>$timeOut包括连接等待time,//检查服务器SSL证书中是否有commonnameCURLOPT_SSL_VERIFYHOST=>$ssl,//设置头信息CURLOPT_HTTPHEADER=>$header];//Post和get特殊处理if($isPost){//设置POST请求$options[CURLOPT_POST]=true;if($isJson&&$data){//json处理$data=json_encode($data);$header=array_merge($header,['Content-Type:application/json']);//设置头部信息$options[CURLOPT_HTTPHEADER]=$header;//如果是json字符串,则不能使用http_build_query函数$options[CURLOPT_POSTFIELDS]=$data;}else{//x-www-form-urlencoded处理//如果是数组方式,需要添加http_build_query,如果不添加,遇到二维数组会报错。$options[CURLOPT_POSTFIELDS]=http_build_query($data);}}else{//GET$options[CURLOPT_CUSTOMREQUEST]='GET';//没有任何?并且data不为空,将参数拼接到url中foreach($dataas$k=>$v){array_push($params_arr,$k.'='.$v);}$params_string=implode('&',$params_arr);$options[CURLOPT_URL]=$url。“?”.$参数字符串;}}//在数组中设置curl比多次使用curl_setopt函数更快curl_setopt_array($curl,$options);//执行请求$response=curl_exec($curl);//返回的CONTENT_TYPE类型$contentType=curl_getinfo($curl,CURLINFO_CONTENT_TYPE);//返回的http状态码$httpCode=curl_getinfo($curl,CURLINFO_HTTP_CODE);$result=['代码'=>$httpCode,'header'=>$contentType];//如果没有错误,curl_errno返回0if(curl_errno($curl)==0){$result['msg']='SUCCESS';如果(is_null($response)){$result['body']=null;}else{$data=json_decode($response,true);if($data){//json数据$result['body']=$data;}else{//如果不是json,则认为是xml数据libxml_disable_entity_loader(true);//校验xml$xml=simplexml_load_string($response,'SimpleXMLElement',LIBXML_NOCDATA);//解析xml$result['正文']=$xml;}}}else{$result['msg']=curl_error($curl);$result['body']=null;}//关闭请求curl_close($curl);返回$结果;}}except可以请求别人的接口数据,拉取别人生成的文件。比如别人的url是http://47.97.185.90:8060/demo...,将返回的内容result['HTTP_BODY']通过file_put_contents($file_name,result['HTTP_BODY'])写入对应目录即可.本文为叶宇文玲原创文章,转载无需联系本人,但请注明文章出处。文章来源:叶宇文玲的思考文章(https://segmentfault.com/u/ye...)