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 — 检查数组里是否有指定的键名或索引
      // 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程序设计有所帮助。

(0)

相关推荐

  • php自定义类fsocket模拟post或get请求的方法

    本文实例讲述了php自定义类fsocket模拟post或get请求的方法.分享给大家供大家参考.具体如下: zsocket.class.php文件如下: <?php class ZSocket { /* * Init */ private function _fsockopen($host, $port, &$errno, &$errstr, $timeout){ $ip = @gethostbyname($host); $s = @socket_create(AF_INET, SO

  • Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解

    之前写过一篇Yii2框架制作RESTful风格的API快速入门教程,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定返回

  • Yii框架响应组件用法实例分析

    本文实例讲述了Yii框架响应组件用法.分享给大家供大家参考,具体如下: 当我们的浏览器发送过来一个请求之后,在我们的操作里面对请求经过处理之后,我们的服务器也会把请求的结果打包成一个消息,然后把这个消息返还给浏览器,这个消息我们称之为响应.在我们的操作中,我们也可以对响应进行一些设置和处理.要处理我们的响应,我们需要先获得响应组件这个东西. $response = \Yii::$app->response; 有了这个响应组件之后,我们可以对响应消息进行一些设置了,比如设置响应的状态码. $res

  • YII2框架中使用yii.js实现的post请求

    yii2提供了很多帮助类,比如Html.Url.Json等,可以很方便的实现一些功能,下面简单说下这个Html.用yii2写view时时经常会用到它,今天在改写一个页面时又用到了它.它比较好用的地方就在于,它不仅仅是生成一个简单的html标签,结合yii2自己的静态资源文件yii.js可以很方便的实现一个post请求. yii2将这些功能都做好了封装,只要在合适的地方调用它的方法就可以了,可以说yii2是个可以开箱即用的框架,你可以用它很快的实现一个需要的功能:比如在页面中放置一个删除按钮,点击

  • 解读PHP的Yii框架中请求与响应的处理流程

    一.请求(Requests) 请求: 一个应用的请求是用 yii\web\Request 对象来表示的,该对象提供了诸如 请求参数(译者注:通常是GET参数或者POST参数).HTTP头.cookies等信息. 默认情况下,对于一个给定的请求,你可以通过 request application component 应用组件(yii\web\Request 类的实例) 获得访问相应的请求对象.在本章节,我们将介绍怎样在你的应用中使用这个组件. 1.请求参数 要获取请求参数,你可以调用 reques

  • php处理restful请求的路由类分享

    复制代码 代码如下: <?php    class Router {        // 路由表        private $routers = array(            array("name"=>"userlist", "pattern"=>"get /user", "action"=>"User#get"),            array(

  • 通过JS和PHP两种方法判断用户请求时使用的浏览器类型

    在进行微信公众账号开发的时候,其中很大一块是微站点的开发,我们需要知道当前的浏览器是微信内置的浏览器,那么如何判断呢? 微信内置浏览器的 User Agent 如何判断微信内置浏览器,首先需要获取微信内置浏览器的User Agent,经过在 iPhone 上微信的浏览器的检测,它的 User Agent 是: Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko)

  • YII Framework学习之request与response用法(基于CHttpRequest响应)

    本文实例讲述了YII Framework学习之request与response用法.分享给大家供大家参考,具体如下: YII中提供了CHttpRequest,封装了请求常用的方法.具体代码如下: class CHttpRequest extends CApplicationComponent { public $enableCookieValidation=false; public $enableCsrfValidation=false; public $csrfTokenName='YII_

  • yii2 在控制器中验证请求参数的使用方法

    写api接口时一般会在控制器中简单验证参数的正确性. 使用yii只带验证器(因为比较熟悉)实现有两种方式(效果都不佳). 针对每个请求单独写个 Model , 定义验证规则并进行验证. 缺点:写好多参数验证的 Model 类. 使用 独立验证器 中提到的 $validator->validateValue() 方法直接验证变量值.缺点:写实例化很多验证器对象. 有么有"一劳永逸"的做法,像在 Model 中通过 rules 方法定义验证规则并实现快速验证的呢?有! 使用方法(实现

  • Yii框架通过请求组件处理get,post请求的方法分析

    本文实例讲述了Yii框架通过请求组件处理get,post请求的方法.分享给大家供大家参考,具体如下: 在控制器的操作中处理get,post请求时,首先需要获得请求组件. $request = \Yii::$app->request; 得到这个请求组件后,我们就可以通过请求组件获得参数了. //通过get获取参数 $id = $request->get("id"); //通过post获取参数 $id = $request->post("id"); 在

  • PHP实现支持GET,POST,Multipart/form-data的HTTP请求类

    本文实例讲述了PHP实现支持GET,POST,Multipart/form-data的HTTP请求类及其应用,分享给大家供大家参考.具体如下: HttpRequest.class.php类文件如下: <?php /** HttpRequest class, HTTP请求类,支持GET,POST,Multipart/form-data * Date: 2013-09-25 * Author: fdipzone * Ver: 1.0 * * Func: * public setConfig 设置连接

  • Yii 框架控制器创建使用及控制器响应操作示例

    本文实例讲述了Yii 框架控制器创建使用及控制器响应操作.分享给大家供大家参考,具体如下: Yii 框架控制器创建使用 在根目录下的controllers目录下创建控制器HelloController.php: <?php namespace app\controllers; use yii\web\Controller; class HelloController extends Controller{ //方法必须以action开头 public function actionIndex()

随机推荐