婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

本文實例講述了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;
  }
}

2.分析

microtime()
函數返回當前 Unix 時間戳的微秒數。
當設置為 TRUE 時,規定函數應該返回一個浮點數,否則返回一個字符串。默認為 FALSE。

詳細的各種分析寫在代碼里面了

3.總結

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

更多關于Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

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

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

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

巨人網絡通訊聲明:本文標題《PHP封裝請求類實例分析【基于Yii框架】》,本文關鍵詞  PHP,封裝,請求,類,實例分析,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP封裝請求類實例分析【基于Yii框架】》相關的同類信息!
  • 本頁收集關于PHP封裝請求類實例分析【基于Yii框架】的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 宝清县| 新闻| 天津市| 凉山| 天柱县| 巴塘县| 黄骅市| 龙岩市| 叙永县| 体育| 谢通门县| 灌阳县| 兴海县| 长岭县| 淄博市| 如皋市| 阿拉善左旗| 巴林右旗| 宣汉县| 信丰县| 湄潭县| 维西| 洛川县| 屯门区| 伽师县| 齐河县| 上蔡县| 石阡县| 岳普湖县| 水城县| 潍坊市| 富宁县| 克拉玛依市| 禄丰县| 澄江县| 乐东| 莫力| 和田县| 深圳市| 璧山县| 屯昌县|