169 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			169 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | namespace app\service; | ||
|  | 
 | ||
|  | class Http | ||
|  | { | ||
|  |     public static function curlGet($url,$apiFields = null, $header = []) | ||
|  |     { | ||
|  |         $ch = curl_init(); | ||
|  |         if(!empty($apiFields)){ | ||
|  |             $i = 1; | ||
|  |             foreach ($apiFields as $key => $value){ | ||
|  |                 if($i == 1) { | ||
|  |                     if(mb_stripos($url, '?') !== FALSE) { | ||
|  |                         $url .= "&" ."$key=" . urlencode($value); | ||
|  |                     } else { | ||
|  |                         $url .= "?" ."$key=" . urlencode($value); | ||
|  |                     } | ||
|  |                 } else { | ||
|  |                     $url .= "&" ."$key=" . urlencode($value); | ||
|  |                 } | ||
|  |                 $i ++; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         curl_setopt($ch, CURLOPT_URL, $url); | ||
|  |         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
|  |         curl_setopt($ch, CURLOPT_FAILONERROR, false); | ||
|  |         if(empty($header)){ | ||
|  |             curl_setopt($ch, CURLOPT_HEADER, false); | ||
|  |         }else{ | ||
|  |             curl_setopt($ch,CURLOPT_HTTPHEADER, $header); | ||
|  |         } | ||
|  | 
 | ||
|  |         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); | ||
|  | 
 | ||
|  |         //https ignore ssl check ?
 | ||
|  |         if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ){ | ||
|  |             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | ||
|  |             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | ||
|  |         } | ||
|  | 
 | ||
|  |         $reponse = curl_exec($ch); | ||
|  | 
 | ||
|  |         if (curl_errno($ch)){ | ||
|  |             throw new \Exception(curl_error($ch),0); | ||
|  |         }else{ | ||
|  |             $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||
|  |             if (200 !== $httpStatusCode){ | ||
|  |                 throw new \Exception($reponse,$httpStatusCode); | ||
|  |             } | ||
|  |         } | ||
|  |         curl_close($ch); | ||
|  |         return $reponse; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function curlPost($url, $postFields = null, $header = [], $hasFile = false) | ||
|  |     { | ||
|  |         $ch = curl_init(); | ||
|  |         curl_setopt($ch, CURLOPT_URL, $url); | ||
|  |         curl_setopt($ch, CURLOPT_FAILONERROR, false); | ||
|  |         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
|  |         //https 请求
 | ||
|  |         if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) { | ||
|  |             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | ||
|  |             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | ||
|  |         } | ||
|  |         curl_setopt($ch, CURLOPT_POST, true); | ||
|  | 
 | ||
|  |         if (is_array($postFields) && 0 < count($postFields)) | ||
|  |         { | ||
|  |             if($hasFile) { | ||
|  |                 // CURLOPT_POSTFIELDS 值为数组则以multipart/form-data形式提交
 | ||
|  |                 curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); | ||
|  |             } else { | ||
|  |                 $jsonHeader = array("Content-Type: application/json; charset=utf-8", "Content-Length:".strlen(json_encode($postFields))); | ||
|  |                 $header = array_merge($header, $jsonHeader); | ||
|  |                 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields)); | ||
|  |             } | ||
|  | 
 | ||
|  |             if(!empty($header)) { | ||
|  |                 curl_setopt($ch,CURLOPT_HTTPHEADER, $header); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         $reponse = curl_exec($ch); | ||
|  |         if (curl_errno($ch)) | ||
|  |         { | ||
|  |             throw new \Exception(curl_error($ch),0); | ||
|  |         } | ||
|  |         else | ||
|  |         { | ||
|  |             $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||
|  |             if (200 !== $httpStatusCode) | ||
|  |             { | ||
|  |                 throw new \Exception($reponse,$httpStatusCode); | ||
|  |             } | ||
|  |         } | ||
|  |         curl_close($ch); | ||
|  |         return $reponse; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function curlDelete($url, $postFields = null) | ||
|  |     { | ||
|  |         $ch = curl_init(); | ||
|  |         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); | ||
|  | 
 | ||
|  |         curl_setopt($ch, CURLOPT_URL, $url); | ||
|  |         curl_setopt($ch, CURLOPT_FAILONERROR, false); | ||
|  |         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
|  |         //https 请求
 | ||
|  |         if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) { | ||
|  |             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | ||
|  |             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (is_array($postFields) && 0 < count($postFields)) | ||
|  |         { | ||
|  |             $header = array("Content-Type: application/json; charset=utf-8", "Content-Length:".strlen(json_encode($postFields))); | ||
|  |             curl_setopt($ch,CURLOPT_HTTPHEADER,$header); | ||
|  |             curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields)); | ||
|  |         } | ||
|  |         $reponse = curl_exec($ch); | ||
|  |         if (curl_errno($ch)) | ||
|  |         { | ||
|  |             throw new \Exception(curl_error($ch),0); | ||
|  |         } | ||
|  |         else | ||
|  |         { | ||
|  |             $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||
|  |             if (200 !== $httpStatusCode) | ||
|  |             { | ||
|  |                 throw new \Exception($reponse,$httpStatusCode); | ||
|  |             } | ||
|  |         } | ||
|  |         curl_close($ch); | ||
|  |         return $reponse; | ||
|  |     } | ||
|  | 
 | ||
|  |     //POST请求的结果解析
 | ||
|  |     public static function decodePostResult($url, $param, $header = [], $hasFile = false) | ||
|  |     { | ||
|  |         $resp = []; | ||
|  |         try { | ||
|  |             $resp = json_decode(self::curlPost($url, $param, $header, $hasFile), true); | ||
|  |             $resp['resp_status'] = empty($resp) ? false :true; | ||
|  |         } catch (\Exception $e) { | ||
|  |             $resp = json_decode($e->getMessage(), true); | ||
|  |             $resp['resp_status'] = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         return $resp; | ||
|  |     } | ||
|  | 
 | ||
|  |     //GET请求结果解析
 | ||
|  |     public static function decodeGetResult($url, $header=[], $param = []) | ||
|  |     { | ||
|  |         $resp = []; | ||
|  |         try { | ||
|  |             $resp = json_decode(self::curlGet($url, $param, $header), true); | ||
|  |             $resp['resp_status'] = empty($resp) ? false :true; | ||
|  |         } catch (\Exception $e) { | ||
|  |             $resp = json_decode($e->getMessage(), true); | ||
|  |             $resp['resp_status'] = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         return $resp; | ||
|  |     } | ||
|  | } |