当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-08 16:04:39 浏览: 评论:0 

这篇文章主要介绍了PHP封装请求类,结合实例形式分析了基于Yii框架的curl封装请求处理的相关实现技巧,需要的朋友可以参考下。

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

1.源码

  1. <?php 
  2. namespace app\common\components; 
  3. use Yii; 
  4. use app\common\services\BaseService; 
  5. class HttpClient extends BaseService{ 
  6.   private static $headers = []; 
  7.   private static $cookie = null; 
  8.   public static function get($url$param =[]) { 
  9.     return self::curl($url$param,"get"); 
  10.   } 
  11.   public static function post($url$param,$extra = [] ) { 
  12.     return self::curl($url$param,"post"); 
  13.   } 
  14.   protected static function curl($url$param$method = 'post'
  15.   { 
  16.     $calculate_time1 = microtime(true); 
  17.     // 初始华 
  18.     $curl = curl_init(); 
  19.     // 设置url 
  20.     curl_setopt($curl, CURLOPT_URL, $url); 
  21.     // 设置为0表示不返回HTTP头部信息 
  22.     curl_setopt($curl, CURLOPT_HEADER, 0); 
  23.     // 设置为1返回将curl_exec()获取的信息以字符串返回,而不是直接输出 设置为0返回true/false 
  24.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  25.     // TRUE 将在安全传输时输出 SSL 证书信息到 STDERR。 
  26.     curl_setopt($curl, CURLOPT_CERTINFO , true); 
  27.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
  28.     // FALSE 禁止 cURL 验证对等证书 
  29.     // 交换证书可以在 CURLOPT_CAINFO 选项中设置,CURLOPT_CAPATH中设置证书目录。 
  30.       curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
  31.       if( isset( Yii::$app->params['curl'] ) && isset(Yii::$app->params['curl']['timeout']) ){ 
  32.       curl_setopt($curl, CURLOPT_TIMEOUT, Yii::$app->params['curl']['timeout']); 
  33.     }else
  34.       curl_setopt($curl, CURLOPT_TIMEOUT, 5); 
  35.     } 
  36.     // array_key_exists — 检查数组里是否有指定的键名或索引 
  37.       // CURLOPT_USERAGENT在HTTP请求中包含一个"User-Agent: "头的字符串 
  38.     if(array_key_exists("HTTP_USER_AGENT",$_SERVER)){ 
  39.       curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
  40.     } 
  41.     // CURLOPT_HTTPHEADER设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100') 
  42.     if(!emptyempty(self::$headers)){ 
  43.       $headerArr = []; 
  44.       foreach( self::$headers as $n => $v ) { 
  45.         $headerArr[] = $n .': ' . $v
  46.       } 
  47.       curl_setopt ($curl, CURLOPT_HTTPHEADER , $headerArr ); //构造IP 
  48.     } 
  49.     // CURLOPT_COOKIE设定 HTTP 请求中"Cookie: "部分的内容。多个 cookie 用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。 
  50.     if( self::$cookie ){ 
  51.       curl_setopt($curl, CURLOPT_COOKIE, self::$cookie); 
  52.     } 
  53.     // post处理 :TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。 
  54.     if ($method == 'post'
  55.     { 
  56.       curl_setopt($curl, CURLOPT_POST, TRUE); 
  57.       // 如果为数组就变成字符串 
  58.       if(is_array($param)){ 
  59.         $param = http_build_query($param); 
  60.       } 
  61.       // 全部数据使用HTTP协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。 
  62.       curl_setopt($curl, CURLOPT_POSTFIELDS, $param); 
  63.     }else
  64.       //get请求 
  65.       curl_setopt($curl, CURLOPT_POST, FALSE); 
  66.     } 
  67.     // 执行输出 
  68.     $info = curl_exec($curl); 
  69.     //log:返回最后一次的错误代码 
  70.     $_errno = curl_errno($curl); 
  71.     $_error = ''
  72.     if($_errno
  73.     { 
  74.       // 返回当前会话最后一次错误的字符串 
  75.       $_error = curl_error($curl); 
  76.     } 
  77.     curl_close($curl); 
  78.     // 花费的时间 
  79.     $calculate_time_span = microtime(true) - $calculate_time1
  80.     $log = \Yii::$app->getRuntimePath().DIRECTORY_SEPARATOR.'curl.log'
  81.     // int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) 
  82.     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); 
  83.     if$_error ){ 
  84.       return self::_err( $_error ); 
  85.     } 
  86.     return $info
  87.   } 
  88.   public static function setHeader($header){ 
  89.      self::$headers = $header
  90.   } 
  91.   public static function setCookie( $cookie ){ 
  92.     self::$cookie = $cookie
  93.   } 

2.分析

microtime()

函数返回当前 Unix 时间戳的微秒数。

当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串。默认为 FALSE。

详细的各种分析写在代码里面了

3.总结

总结就是get与post差不多(初始化执行关闭) 选项也差不多  就是在方式上面会有些差别!

Tags: PHP封装请求类 Yii框架

分享到: