加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

基于Yii框架实施的封装请求类过程及代码是怎样的

发布时间:2022-06-30 17:13:22 所属栏目:PHP教程 来源:互联网
导读:这篇文章给大家介绍了基于Yii框架实现的封装请求类过程及代码是怎样的的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。 1.源码 ?php namespace appcommoncomponents; use Yi
  这篇文章给大家介绍了“基于Yii框架实现的封装请求类过程及代码是怎样的”的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。
 
  1.源码
 
  <?php
  namespace appcommoncomponents;
  use Yii;
  use appcommonservicesBaseService;
  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{
 
  2.分析
 
  microtime()
  函数返回当前 Unix 时间戳的微秒数。
  当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串。默认为 FALSE。
 
  详细的各种分析写在代码里面了
 
  3.总结
 
  总结就是get与post差不多(初始化执行关闭) 选项也差不多  就是在方式上面会有些差别!
 
  这篇关于“基于Yii框架实现的封装请求类过程及代码是怎样的”的文章就介绍到这了。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读