PHP封裝請求類實例分析【基于Yii框架】
本文實例講述了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 — 檢查數(shù)組里是否有指定的鍵名或索引
// 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 頭字段的數(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設定 HTTP 請求中"Cookie: "部分的內(nèi)容。多個 cookie 用分號分隔,分號后帶一個空格(例如, "fruit=apple; colour=red")。
if( self::$cookie ){
curl_setopt($curl, CURLOPT_COOKIE, self::$cookie);
}
// post處理 :TRUE 時會發(fā)送 POST 請求,類型為:application/x-www-form-urlencoded,是 HTML 表單提交時最常見的一種。
if ($method == 'post')
{
curl_setopt($curl, CURLOPT_POST, TRUE);
// 如果為數(shù)組就變成字符串
if(is_array($param)){
$param = http_build_query($param);
}
// 全部數(shù)據(jù)使用HTTP協(xié)議中的 "POST" 操作來發(fā)送。 要發(fā)送文件,在文件名前面加上@前綴并使用完整路徑。
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
}else{
//get請求
curl_setopt($curl, CURLOPT_POST, FALSE);
}
// 執(zhí)行輸出
$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;
}
}
2.分析
microtime()
函數(shù)返回當前 Unix 時間戳的微秒數(shù)。
當設置為 TRUE 時,規(guī)定函數(shù)應該返回一個浮點數(shù),否則返回一個字符串。默認為 FALSE。
詳細的各種分析寫在代碼里面了
3.總結(jié)
總結(jié)就是get與post差不多(初始化執(zhí)行關(guān)閉) 選項也差不多 就是在方式上面會有些差別!
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎教程》、《php面向?qū)ο蟪绦蛟O計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。
- PHP實現(xiàn)支持GET,POST,Multipart/form-data的HTTP請求類
- php處理restful請求的路由類分享
- 通過JS和PHP兩種方法判斷用戶請求時使用的瀏覽器類型
- php自定義類fsocket模擬post或get請求的方法
- 解讀PHP的Yii框架中請求與響應的處理流程
- YII2框架中使用yii.js實現(xiàn)的post請求
- yii2 在控制器中驗證請求參數(shù)的使用方法
- Yii框架通過請求組件處理get,post請求的方法分析
- Yii 框架控制器創(chuàng)建使用及控制器響應操作示例
- Yii框架響應組件用法實例分析
- Yii2框架RESTful API 格式化響應,授權(quán)認證和速率限制三部分詳解
- YII Framework學習之request與response用法(基于CHttpRequest響應)
相關(guān)文章
Yii2創(chuàng)建控制器(createController)方法詳解
這篇文章主要介紹了Yii2創(chuàng)建控制器(createController)的方法,結(jié)合實例形式分析了Yii創(chuàng)建控制器所使用到的方法、操作步驟與相關(guān)技巧,需要的朋友可以參考下2016-07-07
laravel5.6 框架郵件隊列database驅(qū)動簡單demo示例
這篇文章主要介紹了laravel5.6 框架郵件隊列database驅(qū)動,結(jié)合實例形式詳細分析了laravel5.6郵件隊列database驅(qū)動具體設置、實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-01-01

