您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在PHP中封裝一個請求類,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1.源碼
<?php namespace app\common\components; use Yii; use app\common\services\BaseService; class HttpClient extends BaseService{ private static $headers = []; private static $cookie = null; public static function get($url, $param =[]) { return self::curl($url, $param,"get"); } public static function post($url, $param,$extra = [] ) { return self::curl($url, $param,"post"); } protected static function curl($url, $param, $method = 'post') { $calculate_time1 = microtime(true); // 初始華 $curl = curl_init(); // 設置url curl_setopt($curl, CURLOPT_URL, $url); // 設置為0表示不返回HTTP頭部信息 curl_setopt($curl, CURLOPT_HEADER, 0); // 設置為1返回將curl_exec()獲取的信息以字符串返回,而不是直接輸出 設置為0返回true/false curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // TRUE 將在安全傳輸時輸出 SSL 證書信息到 STDERR。 curl_setopt($curl, CURLOPT_CERTINFO , true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // FALSE 禁止 cURL 驗證對等證書 // 交換證書可以在 CURLOPT_CAINFO 選項中設置,CURLOPT_CAPATH中設置證書目錄。 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); if( isset( Yii::$app->params['curl'] ) && isset(Yii::$app->params['curl']['timeout']) ){ curl_setopt($curl, CURLOPT_TIMEOUT, Yii::$app->params['curl']['timeout']); }else{ curl_setopt($curl, CURLOPT_TIMEOUT, 5); } // array_key_exists — 檢查數組里是否有指定的鍵名或索引 // CURLOPT_USERAGENT在HTTP請求中包含一個"User-Agent: "頭的字符串 if(array_key_exists("HTTP_USER_AGENT",$_SERVER)){ curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); } // CURLOPT_HTTPHEADER設置 HTTP 頭字段的數組。格式: array('Content-type: text/plain', 'Content-length: 100') if(!empty(self::$headers)){ $headerArr = []; foreach( self::$headers as $n => $v ) { $headerArr[] = $n .': ' . $v; } curl_setopt ($curl, CURLOPT_HTTPHEADER , $headerArr ); //構造IP } // CURLOPT_COOKIE設定 HTTP 請求中"Cookie: "部分的內容。多個 cookie 用分號分隔,分號后帶一個空格(例如, "fruit=apple; colour=red")。 if( self::$cookie ){ curl_setopt($curl, CURLOPT_COOKIE, self::$cookie); } // post處理 :TRUE 時會發送 POST 請求,類型為:application/x-www-form-urlencoded,是 HTML 表單提交時最常見的一種。 if ($method == 'post') { curl_setopt($curl, CURLOPT_POST, TRUE); // 如果為數組就變成字符串 if(is_array($param)){ $param = http_build_query($param); } // 全部數據使用HTTP協議中的 "POST" 操作來發送。 要發送文件,在文件名前面加上@前綴并使用完整路徑。 curl_setopt($curl, CURLOPT_POSTFIELDS, $param); }else{ //get請求 curl_setopt($curl, CURLOPT_POST, FALSE); } // 執行輸出 $info = curl_exec($curl); //log:返回最后一次的錯誤代碼 $_errno = curl_errno($curl); $_error = ''; if($_errno) { // 返回當前會話最后一次錯誤的字符串 $_error = curl_error($curl); } curl_close($curl); // 花費的時間 $calculate_time_span = microtime(true) - $calculate_time1; $log = \Yii::$app->getRuntimePath().DIRECTORY_SEPARATOR.'curl.log'; // int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) file_put_contents($log,date('Y-m-d H:i:s')." [ time:{$calculate_time_span} ] url: {$url} \nmethod: {$method} \ndata: ".json_encode($param)." \nresult: {$info} \nerrorno: {$_errno} error: {$_error} \n",FILE_APPEND); if( $_error ){ return self::_err( $_error ); } return $info; } public static function setHeader($header){ self::$headers = $header; } public static function setCookie( $cookie ){ self::$cookie = $cookie; } }
關于如何在PHP中封裝一個請求類就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。