首页 > 编程 > PHP > 正文

PHP封装请求类实例分析【基于Yii框架】

2019-11-21 19:43:59
字体:
来源:转载
供稿:网友

本文实例讲述了PHP封装请求类。分享给大家供大家参考,具体如下:

1.源码

<?phpnamespace 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表