PHP封裝請(qǐng)求類實(shí)例分析【基于Yii框架】
本文實(shí)例講述了PHP封裝請(qǐng)求類。分享給大家供大家參考,具體如下:
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(); // 設(shè)置url curl_setopt($curl, CURLOPT_URL, $url); // 設(shè)置為0表示不返回HTTP頭部信息 curl_setopt($curl, CURLOPT_HEADER, 0); // 設(shè)置為1返回將curl_exec()獲取的信息以字符串返回,而不是直接輸出 設(shè)置為0返回true/false curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // TRUE 將在安全傳輸時(shí)輸出 SSL 證書信息到 STDERR。 curl_setopt($curl, CURLOPT_CERTINFO , true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // FALSE 禁止 cURL 驗(yàn)證對(duì)等證書 // 交換證書可以在 CURLOPT_CAINFO 選項(xiàng)中設(shè)置,CURLOPT_CAPATH中設(shè)置證書目錄。 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 — 檢查數(shù)組里是否有指定的鍵名或索引 // CURLOPT_USERAGENT在HTTP請(qǐng)求中包含一個(gè)"User-Agent: "頭的字符串 if(array_key_exists("HTTP_USER_AGENT",$_SERVER)){ curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); } // CURLOPT_HTTPHEADER設(shè)置 HTTP 頭字段的數(shù)組。格式: 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 ); //構(gòu)造IP } // CURLOPT_COOKIE設(shè)定 HTTP 請(qǐng)求中"Cookie: "部分的內(nèi)容。多個(gè) cookie 用分號(hào)分隔,分號(hào)后帶一個(gè)空格(例如, "fruit=apple; colour=red")。 if( self::$cookie ){ curl_setopt($curl, CURLOPT_COOKIE, self::$cookie); } // post處理 :TRUE 時(shí)會(huì)發(fā)送 POST 請(qǐng)求,類型為:application/x-www-form-urlencoded,是 HTML 表單提交時(shí)最常見的一種。 if ($method == 'post') { curl_setopt($curl, CURLOPT_POST, TRUE); // 如果為數(shù)組就變成字符串 if(is_array($param)){ $param = http_build_query($param); } // 全部數(shù)據(jù)使用HTTP協(xié)議中的 "POST" 操作來(lái)發(fā)送。 要發(fā)送文件,在文件名前面加上@前綴并使用完整路徑。 curl_setopt($curl, CURLOPT_POSTFIELDS, $param); }else{ //get請(qǐng)求 curl_setopt($curl, CURLOPT_POST, FALSE); } // 執(zhí)行輸出 $info = curl_exec($curl); //log:返回最后一次的錯(cuò)誤代碼 $_errno = curl_errno($curl); $_error = ''; if($_errno) { // 返回當(dāng)前會(huì)話最后一次錯(cuò)誤的字符串 $_error = curl_error($curl); } curl_close($curl); // 花費(fèi)的時(shí)間 $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; } }
2.分析
microtime()
函數(shù)返回當(dāng)前 Unix 時(shí)間戳的微秒數(shù)。
當(dāng)設(shè)置為 TRUE 時(shí),規(guī)定函數(shù)應(yīng)該返回一個(gè)浮點(diǎn)數(shù),否則返回一個(gè)字符串。默認(rèn)為 FALSE。
詳細(xì)的各種分析寫在代碼里面了
3.總結(jié)
總結(jié)就是get與post差不多(初始化執(zhí)行關(guān)閉) 選項(xiàng)也差不多 就是在方式上面會(huì)有些差別!
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
- PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請(qǐng)求類
- php處理restful請(qǐng)求的路由類分享
- 通過(guò)JS和PHP兩種方法判斷用戶請(qǐng)求時(shí)使用的瀏覽器類型
- php自定義類fsocket模擬post或get請(qǐng)求的方法
- 解讀PHP的Yii框架中請(qǐng)求與響應(yīng)的處理流程
- YII2框架中使用yii.js實(shí)現(xiàn)的post請(qǐng)求
- yii2 在控制器中驗(yàn)證請(qǐng)求參數(shù)的使用方法
- Yii框架通過(guò)請(qǐng)求組件處理get,post請(qǐng)求的方法分析
- Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作示例
- Yii框架響應(yīng)組件用法實(shí)例分析
- Yii2框架RESTful API 格式化響應(yīng),授權(quán)認(rèn)證和速率限制三部分詳解
- YII Framework學(xué)習(xí)之request與response用法(基于CHttpRequest響應(yīng))
相關(guān)文章
PHP數(shù)據(jù)庫(kù)鏈接類(PDO+Access)實(shí)例分享
這篇文章主要介紹了PHP數(shù)據(jù)庫(kù)鏈接類(PDO+Access),有需要的朋友可以參考一下2013-12-12php實(shí)現(xiàn)可以設(shè)置中獎(jiǎng)概率的抽獎(jiǎng)程序代碼分享
這篇文章主要介紹了一個(gè)抽獎(jiǎng)程序,要求一等獎(jiǎng)的中獎(jiǎng)概率是0.12%,二等獎(jiǎng)中獎(jiǎng)概率是3%,三等獎(jiǎng)中獎(jiǎng)概率是12%,其他中獎(jiǎng)概率是都是謝謝惠顧2014-01-01php中使用$_REQUEST需要注意的一個(gè)問(wèn)題
本篇文章介紹了,php中使用$_REQUEST需要注意的一個(gè)問(wèn)題,需要的朋友參考下2013-05-05php實(shí)現(xiàn)12306余票查詢、價(jià)格查詢示例
這篇文章主要介紹了php實(shí)現(xiàn)12306余票查詢、價(jià)格查詢示例的相關(guān)資料2014-04-04TP5框架實(shí)現(xiàn)的數(shù)據(jù)庫(kù)備份功能示例
這篇文章主要介紹了TP5框架實(shí)現(xiàn)的數(shù)據(jù)庫(kù)備份功能,結(jié)合實(shí)例形式分析了TP5數(shù)據(jù)庫(kù)備份功能相關(guān)原理及實(shí)現(xiàn)方法,需要的朋友可以參考下2020-04-04ThinkPHP后臺(tái)首頁(yè)index使用frameset時(shí)的注意事項(xiàng)分析
這篇文章主要介紹了ThinkPHP后臺(tái)首頁(yè)index使用frameset時(shí)的注意事項(xiàng),需要的朋友可以參考下2014-08-08laravel + vue實(shí)現(xiàn)的數(shù)據(jù)統(tǒng)計(jì)繪圖(今天、7天、30天數(shù)據(jù))
這篇文章主要給大家介紹了關(guān)于利用laravel + vue如何實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)繪圖(今天、7天、30天數(shù)據(jù))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,需要的朋友們下面隨著小編來(lái)一起看看吧2018-07-07Laravel5.1 框架控制器基礎(chǔ)用法實(shí)例分析
這篇文章主要介紹了Laravel5.1 框架控制器基礎(chǔ)用法,結(jié)合實(shí)例形式分析了laravel5.1框架控制器的基本原理、定義與使用方法,需要的朋友可以參考下2020-01-01