zoukankan      html  css  js  c++  java
  • 接口开发封装的几个常用的方法

    废话不多说了,直接上代码具体看代码的注释吧:

    方法一,

    /**
         * 发送请求的方法
         * @param $type 请求类型get或post
         * @param string $url 发送请求的URL
         * @param $data post请求数据
         * @param bool $ssl 是否为https协议
         * @return string 响应主体Conent
         */
        public function http_request($type='post',$url, $data=array(), $ssl=true)
        {
            // 首先需要开启curl扩展
            $curl = curl_init();// curl初始化
            // 设置curl传输选项
            curl_setopt($curl, CURLOPT_URL, $url);// $curl句柄, CURLOPT_URL需要获取的URL地址,也可以在 curl_init() 函数中设置。
            // user_agent 设置请求代理信息
            $agent = $_SERVER['HTTP_USER_AGENT'];
            $user_agent = isset($agent) ? $agent : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0';
            curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);  //CURL_USERAGENT 在HTTP请求中包含一个"User-Agent: "头的字符串
            // referer头 请求来源
            curl_setopt($curl, CURLOPT_AUTOREFERER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
            // SSL相关的选项设置
            if($ssl)
            {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证
                //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 默认为2,因此可以省略不写
            }
            if($type == "post")
            {
                // 处理POST相关选项(比get多下面两项设置,其他都是一样的)
                curl_setopt($curl, CURLOPT_POST, true); // 是否为post请求
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 发送post数据
            }
            
            // 响应信息设置(这里只需要获取相应主体,其他如响应头不需要去处理)
            curl_setopt($curl, CURLOPT_HEADER, false); // 是否处理响应头
            //设置curl参数,要求结果是否输出到屏幕上,为true的时候是不返回到网页中
            curl_setopt($curl, CURLOPT_RETURNTRANSFER , true); // curl_exec() 是否返回响应结果
            // 发出请求
            $response = curl_exec($curl);
            $error = curl_error($curl);
            curl_close($curl); // 关闭资源
            //发生错误,抛出异常
            if($error) throw new Exception('请求发生错误:' . $error);
    
            return $response;   
    
        }

    方法二,php curl就是php中的数据传输神器。( 接口开发的必备技能之一)

     //curl获取数据
        public function curl_get_post($url, $data = '', $request = 'GET')
        {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);//这里设置后,发送的数据就是json
            $data = curl_exec($curl);
            if(curl_errno($curl)) {
                //echo 'Errno' . curl_error($curl);
                error_log(date("Y-m-d H:i:s", time()) . ":Errno" . curl_error($curl) . "t
    ", 3, "data/component_access_token/log.txt");
            }
            curl_close($curl);
            return $data;
        }

    方法三,由于接口开发,每次调用接口都需要一个令牌环凭据 accesstoken,而且每次授权后,它都有一个过期的期限 。

    我的做法是将token直接保存在文本文件中(.txt),然后根据过期的时间去判断是否再次获取。

    注意*:今天在使用file_put_contents的时候,犯了一个错误,就是以为这个函数会穿件文件夹,如果父级目录文件夹不存在的话,这个函数是无法自动创建文件的

     if(!empty($auth_code))
            {    $result = $this->http_request('post', $url, $data=array(), true);
                 $result = json_decode($result, true);
                $access_token=$result['access_token'];
                $refresh_token=$result['refresh_token'];
                file_put_contents("data/weimob_access_token/" . $client_id . ".txt", $access_token . ',' . $refresh_token . ',' . time());
    
            }else{
                  if(!file_exists("data/weimob_access_token/" . $client_id . '.txt'))
                {
                    return false;
                }
                $str = file_get_contents("data/weimob_access_token/" . $client_id . '.txt');
                $arr = explode(',', $str);
                $access_token = $arr[0];
                $refresh_token = $arr[1];
                $time = $arr[2];
                if($time + $this->expires_in < time())
                {
                   
                $result = $this->http_request('post', $url, $data=array(), true);
                $result = json_decode($result, true);
                $access_token=$result['access_token'];
                $refresh_token=$result['refresh_token'];
                file_put_contents("data/weimob_access_token/" . $client_id . ".txt", $access_token . ',' . $refresh_token . ',' . time());
                }
            }
            return    $access_token;
  • 相关阅读:
    T4设计时模板调试
    MVC开发T4代码生成之一文本模板基础
    经典选项卡
    IE 调试工具 Utilu IE Collection:IE5.5、6.0、7.0, 8.0…各版本浏览器兼容性测试工具
    滚动读行!
    自定义标签的用法、支持IE6
    jQuery 参数传递例子
    IMG在IE6下不能HOVER的解决办法!
    点击渐变弹出层
    操作滚动条滚动到指定位置
  • 原文地址:https://www.cnblogs.com/zhengweizhao/p/7391145.html
Copyright © 2011-2022 走看看