做做筆記,有錯誤,望大神指點,多多討論,多多留言!
<?php namespace App\Lib; class HttpRequest { /** * GET請求 * @param $url * @param array $data * @param bool $https * @param int $timeout * @return bool|string */ public function httpGet($url,$data=array(),$https=true,$timeout=60) { if($url == "" || $timeout <= 0){ return false; } if(is_array($data)) { $url = $url . '?' . http_build_query($data); } $curl = curl_init(); if ($https) { //設置爲https請求,不驗證證書和hosts curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $response_data = curl_exec($curl); $status = curl_getinfo($curl); curl_close($curl); if(intval($status["http_code"])==200){ return $response_data; }else{ return false; } } /** * POST請求 * @param $url * @param array $data * @param bool $https * @param int $timeout * @return bool|string */ public function httpPost($url,$data=array(),$https=true,$timeout=60) { if($url == "" || $timeout <= 0){ return false; } if(!is_array($data)){ echo "參數必須爲array"; } $curl = curl_init();//初始化curl if ($https) { //設置爲https請求,不驗證證書和hosts curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($curl, CURLOPT_URL,$url);//抓取指定網頁 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果爲字符串且輸出到屏幕上 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_HEADER, 0);//設置header curl_setopt($curl, CURLOPT_POST, 1);//post提交方式 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response_data = curl_exec($curl); $status = curl_getinfo($curl); curl_close($curl); if(intval($status["http_code"])==200){ return $response_data; }else{ return false; } } /** * POST JSON提交 * @param $url * @param array $data * @param bool $json * @param bool $https * @param int $timeout * @return bool|string */ public function httpPostJson($url, $data=array(), $json = false,$https=true,$timeout = 60){ if($url == "" || $timeout <= 0){ return false; } if(!is_array($data)){ echo "參數必須爲array"; }else{ $data = json_encode( $data ); } $curl = curl_init(); curl_setopt($curl, CURLOPT_URL,$url);//抓取指定網頁 if ($https) { //設置爲https請求,不驗證證書和hosts curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($curl, CURLOPT_POST, 1); // curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); if($json){ // 發送JSON數據 curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json;charset=utf-8', 'Content-Length: ' . strlen($data)) ); } curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); curl_setopt($curl, CURLOPT_TIMEOUT, (int)$timeout); $response_data = curl_exec($curl); $status = curl_getinfo($curl); curl_close($curl); if(intval($status["http_code"])==200){ return $response_data; }else{ return false; } } /** * POST XML 請求 * @param $url * @param array $data * @param bool $https * @param int $timeout * @return bool|string */ public function httpPostXml($url,$data=array(),$https=true,$timeout = 60) { if($url == "" || $timeout <= 0){ return false; } // 將數組轉成字xml if(is_array($data)){ $xml = $this->arrayToXml($data); } $curl = curl_init(); if ($https) { //設置爲https請求,不驗證證書和hosts curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } // 設置超時 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//嚴格校驗 // 設置header curl_setopt($curl, CURLOPT_HEADER, false); // 要求結果爲字符串且輸出到屏幕上 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // post提交方式 curl_setopt($curl, CURLOPT_POST, true); // curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($curl, CURLOPT_POSTFIELDS, $xml); // 運行curl $response_data = curl_exec($curl); $status = curl_getinfo($curl); curl_close($curl); if(intval($status["http_code"])==200){ return $response_data; }else{ return false; } } /** * 數組轉xml字符 * @param array $data * @return bool|string */ public function arrayToXml($data=array()){ if(!is_array($data) || count($data) <= 0){ return false; } $xml = "<xml>"; foreach ($data as $key=>$val){ if (is_numeric($val)){ $xml.="<".$key.">".$val."</".$key.">"; }else{ $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } } $xml.="</xml>"; return $xml; } /** * xml轉json字符串 * @param $xml * @param bool $isFile * @return bool|false|string */ public function xmlToString($xml,$isFile=false){ //禁止引用外部xml實體 libxml_disable_entity_loader(true); if($isFile){ if(!file_exists($xml)) return false; $xmlStr = file_get_contents($xml); }else{ $xmlStr = $xml; } $result= json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA)); return $result; } }