濮阳杆衣贸易有限公司

主頁 > 知識庫 > PHP封裝請求類實例分析【基于Yii框架】

PHP封裝請求類實例分析【基于Yii框架】

熱門標(biāo)簽:太原極信防封電銷卡 電銷招聘機器人 天津營銷電話機器人加盟代理 熱線電話機器人 事業(yè)單位如何百度地圖標(biāo)注 福泉電話機器人 南寧crm外呼系統(tǒng)平臺 格陵蘭島地圖標(biāo)注 地圖標(biāo)注入哪個科目

本文實例講述了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();
    // 設(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 將在安全傳輸時輸出 SSL 證書信息到 STDERR。
    curl_setopt($curl, CURLOPT_CERTINFO , true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    // FALSE 禁止 cURL 驗證對等證書
    // 交換證書可以在 CURLOPT_CAINFO 選項中設(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請求中包含一個"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 請求中"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)
    {
      // 返回當(dāng)前會話最后一次錯誤的字符串
      $_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ù)返回當(dāng)前 Unix 時間戳的微秒數(shù)。
當(dāng)設(shè)置為 TRUE 時,規(guī)定函數(shù)應(yīng)該返回一個浮點數(shù),否則返回一個字符串。默認(rèn)為 FALSE。

詳細(xì)的各種分析寫在代碼里面了

3.總結(jié)

總結(jié)就是get與post差不多(初始化執(zhí)行關(guān)閉) 選項也差不多  就是在方式上面會有些差別!

更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • PHP實現(xiàn)支持GET,POST,Multipart/form-data的HTTP請求類
  • php處理restful請求的路由類分享
  • 通過JS和PHP兩種方法判斷用戶請求時使用的瀏覽器類型
  • php自定義類fsocket模擬post或get請求的方法
  • 解讀PHP的Yii框架中請求與響應(yīng)的處理流程
  • YII2框架中使用yii.js實現(xiàn)的post請求
  • yii2 在控制器中驗證請求參數(shù)的使用方法
  • Yii框架通過請求組件處理get,post請求的方法分析
  • Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作示例
  • Yii框架響應(yīng)組件用法實例分析
  • Yii2框架RESTful API 格式化響應(yīng),授權(quán)認(rèn)證和速率限制三部分詳解
  • YII Framework學(xué)習(xí)之request與response用法(基于CHttpRequest響應(yīng))

標(biāo)簽:金華 香港 郴州 佳木斯 阿克蘇 通化 自貢 寶雞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP封裝請求類實例分析【基于Yii框架】》,本文關(guān)鍵詞  PHP,封裝,請求,類,實例分析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP封裝請求類實例分析【基于Yii框架】》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP封裝請求類實例分析【基于Yii框架】的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    瑞金市| 金平| 孟津县| 梓潼县| 阿尔山市| 偏关县| 通州市| 大悟县| 页游| 青海省| 孟村| 昭通市| 高唐县| 岢岚县| 西乌珠穆沁旗| 萍乡市| 荆州市| 龙里县| 开阳县| 扎兰屯市| 虞城县| 萨迦县| 丽江市| 崇礼县| 聂拉木县| 德安县| 德清县| 岑溪市| 延长县| 拜泉县| 平武县| 东港市| 鹤壁市| 青冈县| 隆尧县| 南涧| 越西县| 泸定县| 大同市| 墨玉县| 大石桥市|