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

PHP使用curl封装一个http请求类(链式调用)

时间:2023-03-30 01:34:16 PHP

原理很简单,就是利用curl库ch=curl_init();}/***设置httpheader*@param$header*@return$this*/publicfunctionsetHeader($header){if(is_array($header)){curl_setopt($this->ch,CURLOPT_HTTPHEADER,$header);}返回$this;}/***设置http超时*@paramint$time*@return$this*/publicfunctionsetTimeout($time){//不能小于或等于0if($time<=0){$time=5;}//只需要设置秒数curl_setopt($this->ch,CURLOPT_TIMEOUT,$time);返回$这个;}/***设置http代理*@paramstring$proxy*@return$this*/publicfunctionsetProxy($proxy){if($proxy){curl_setopt($this->ch,CURLOPT_PROXY,$proxy);}返回$this;}/***设置http代理端口*@paramint$port*@return$this*/publicfunctionsetProxyPort($port){if(is_int($port)){curl_setopt($this->ch,CURLOPT_PROXYPORT,$港口);}返回$this;}/***设置源页面*@paramstring$referer*@return$this*/publicfunctionsetReferer($referer=""){if(!empty($referer))curl_setopt($this->ch,CURLOPT_REFERER,$referer);返回$这个;}/***设置用户代理*@paramstring$agent*@return$this*/publicfunctionsetUserAgent($agent=""){if($agent){//模拟用户使用的浏览器curl_setopt($this->ch,CURLOPT_USERAGENT,$agent);}返回$this;}/***http响应中是否显示header,1表示显示*@param$show*@return$this*/publicfunctionshowResponseHeader($show){curl_setopt($this->ch,CURLOPT_HEADER,$show);返回$这个;}/***设置http请求的参数,get或者post*@paramarray$params*@return$this*/publicfunctionsetParams($params){$this->httpParams=$params;返回$这个;}/***设置证书路径*@param$file*/publicfunctionsetCainfo($file){curl_setopt($this->ch,CURLOPT_CAINFO,$file);}/***模拟GET请求*@paramstring$url*@paramstring$dataType*@returnbool|mixed*/publicfunctionget($url,$dataType='text'){if(stripos($url,'https://')!==FALSE){curl_setopt($this->ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($this->ch,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($this->ch,CURLOPT_SSLVERSION,1);}//设置获取参数if(!empty($this->httpParams)&&is_array($this->httpParams)){if(strpos($url,'?')!==false){$url.=http_build_query($this->httpParams);}else{$url.='?'.http_build_query($this->httpParams);}}//结束设置获取参数curl_setopt($this->ch,CURLOPT_URL,$url);curl_setopt($this->ch,CURLOPT_RETURNTRANSFER,1);$content=curl_exec($this->ch);$status=curl_getinfo($this->ch);curl_close($this->ch);如果(isset($status['http_code'])&&$status['http_code']==200){如果($dataType=='json'){$content=json_decode($content,true);}返回$内容;}else{返回假;}}/***模拟POST请求**@paramstring$url*@paramarray$fields*@paramstring$dataType*@returnmixed**HttpCurl::post('http://api.example.com/?a=123',数组('abc'=>'123','efg'=>'567'),'json');*HttpCurl::post('http://api.example.com/','这是post原始内容','json');*文件post上传*HttpCurl::post('http://api.example.com/',array('abc'=>'123','file1'=>'@/data/1.jpg'),'json');*/publicfunctionpost($url,$dataType='text'){if(stripos($url,'https://')!==FALSE){curl_setopt($this->ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($this->ch,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($this->ch,CURLOPT_SSLVERSION,1);}curl_setopt($this->ch,CURLOPT_URL,$url);//设置post主体}elseif(is_string($this->http参数)){curl_setopt($this->ch,CURLOPT_POSTFIELDS,$this->httpParams);}}//结束设置postbodycurl_setopt($this->ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($this->ch,CURLOPT_POST,true);$content=curl_exec($this->ch);$status=curl_getinfo($this->ch);curl_close($this->ch);如果(isset($status['http_code'])&&$status['http_code']==200){如果($dataType=='json'){$content=json_decode($content,true);}返回$内容;}else{返回假;}}}使用举例echo(newHttpCurl())->setParams(['name'=>'dfh','age'=>12])->get('http://www.test.com');