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

吾爱主题 阅读:102 2021-09-07 16:05:00 评论:0

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

1.源码

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 <?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框架的PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/fujian9544/article/details/90578593

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容