|
@@ -1,5 +1,8 @@
|
|
|
package com.welampiot.controller;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.welampiot.common.BaseResult;
|
|
|
import com.welampiot.common.InterfaceResultEnum;
|
|
|
import com.welampiot.dto.AcDevInfoDTO;
|
|
@@ -7,17 +10,20 @@ import com.welampiot.service.AcDevInfoService;
|
|
|
import com.welampiot.utils.ExcelUtil;
|
|
|
import com.welampiot.utils.ToolUtils;
|
|
|
import com.welampiot.vo.AcDevInfoVO;
|
|
|
+import jdk.nashorn.internal.runtime.Version;
|
|
|
+import org.apache.commons.collections4.Put;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.util.DigestUtils;
|
|
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.io.IOException;
|
|
|
+import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* ClassName: AcDeviceController
|
|
@@ -37,6 +43,10 @@ public class AcDeviceController {
|
|
|
@Autowired
|
|
|
private AcDevInfoService acDevInfoService;
|
|
|
|
|
|
+ //锐捷ap
|
|
|
+ private final static String appid = "macc2b6d2fd0fa71";
|
|
|
+ private final static String secret = "b3b5a0e09293424392ee5e39c4620e4f";
|
|
|
+ private final static String cookie = "username=033fc7838388kkdjee"; //随便
|
|
|
/**
|
|
|
* 获取AC的列表
|
|
|
* @param request sectionList,page,count,keyword
|
|
@@ -185,4 +195,386 @@ public class AcDeviceController {
|
|
|
}
|
|
|
return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
|
|
|
}
|
|
|
+ @RequestMapping(value = "getUserList",method = RequestMethod.POST)
|
|
|
+ public BaseResult<?> getUserList(HttpServletRequest request) {
|
|
|
+ Integer version = request.getParameter("version") == null ? 0 : Integer.parseInt(request.getParameter("version"));
|
|
|
+ Integer id = request.getParameter("id")== null ? 0 : Integer.parseInt(request.getParameter("id"));
|
|
|
+ if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR, version);
|
|
|
+
|
|
|
+ Integer page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
|
|
|
+ Integer count = request.getParameter("count") == null ? 16 : Integer.parseInt(request.getParameter("count"));
|
|
|
+ Integer areaId = request.getParameter("areaId") == null || request.getParameter("areaId") == "" ? null : Integer.parseInt(request.getParameter("areaId"));
|
|
|
+ Integer sectionId = request.getParameter("sectionId") == null || request.getParameter("sectionId") == "" ? null : Integer.parseInt(request.getParameter("sectionId"));
|
|
|
+ String keyword = request.getParameter("keyword") == null ? "" : request.getParameter("keyword");
|
|
|
+ String download = request.getParameter("download") == null ? "" : request.getParameter("keyword");
|
|
|
+ String action = request.getParameter("action");
|
|
|
+ String searchKey = request.getParameter("searchKey") == null ? "" : request.getParameter("searchKey");;
|
|
|
+
|
|
|
+ Integer limit = count;
|
|
|
+ Integer offset = (page-1)*count;
|
|
|
+
|
|
|
+ AcDevInfoDTO acDevInfoDTO = acDevInfoService.getOneById(id);
|
|
|
+ AcDevInfoVO responeAc = new AcDevInfoVO();
|
|
|
+ responeAc.setStaNum(0);
|
|
|
+ List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
|
|
|
+ responeAc.setStaList(acDevInfoVOList);
|
|
|
+
|
|
|
+ if (acDevInfoDTO.getType() == 0){
|
|
|
+ //云之声
|
|
|
+ String networkIP = acDevInfoDTO.getNetworkIP();
|
|
|
+ //获取随机码与登录
|
|
|
+ String loginResult = this.getPassword(networkIP);
|
|
|
+ if (loginResult.equals("获取随机码失败")){
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_RAND_CODE_ERROR,version);
|
|
|
+ } else if (loginResult.equals("登录失败")) {
|
|
|
+ return toolUtils.response(InterfaceResultEnum.USER_LOGIN_ERROR,version);
|
|
|
+ }
|
|
|
+ String url = "http://"+networkIP+"/api/apmgr";
|
|
|
+ if (action == null) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
|
|
|
+ JSONObject body = new JSONObject();
|
|
|
+ body.put("action",action);
|
|
|
+ body.put("searchkey",searchKey);
|
|
|
+ body.put("numperpage",count);
|
|
|
+ body.put("pagenum",page);
|
|
|
+ try {
|
|
|
+ String respone = toolUtils.sendHttp("post",url,body.toString(),4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_FORM,cookie);
|
|
|
+ if (respone == null || respone.contains("404 Not Found")){
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_CONFIG_ADDRESS_ERROR,version);
|
|
|
+ }else {
|
|
|
+ JSONObject responeObject = JSON.parseObject(respone);
|
|
|
+ Integer ret = responeObject.getInteger("ret");
|
|
|
+ // AcDevInfoVO responeAc = new AcDevInfoVO();
|
|
|
+ if (ret == 1){
|
|
|
+ //数组
|
|
|
+ JSONArray jsonArray = responeObject.getJSONArray("stalist");
|
|
|
+ Integer staNum = responeObject.getInteger("stanum");
|
|
|
+ //List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
|
|
|
+ for (Object value: jsonArray) {
|
|
|
+
|
|
|
+ AcDevInfoVO acDevInfoVO = new AcDevInfoVO();
|
|
|
+ JSONObject item = (JSONObject) value;
|
|
|
+ acDevInfoVO.setMacInfo(item.getString("macinfo"));
|
|
|
+ acDevInfoVO.setRxRate(item.getLong("rx_rate"));
|
|
|
+ acDevInfoVO.setTxRate(item.getLong("tx_rate"));
|
|
|
+ acDevInfoVO.setRxPackets(item.getLong("rx_packets"));
|
|
|
+ acDevInfoVO.setTxPackets(item.getLong("tx_packets"));
|
|
|
+ acDevInfoVO.setLastTime(item.getString("lasttime"));
|
|
|
+ acDevInfoVO.setApMac(item.getString("apmac"));
|
|
|
+ acDevInfoVO.setMac(acDevInfoDTO.getAcAddress());
|
|
|
+ acDevInfoVOList.add(acDevInfoVO);
|
|
|
+ }
|
|
|
+ responeAc.setStaNum(staNum);
|
|
|
+ responeAc.setStaList(acDevInfoVOList);
|
|
|
+ return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
|
|
|
+ }else {
|
|
|
+ responeAc.setStaNum(0);
|
|
|
+ //List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
|
|
|
+ responeAc.setStaList(acDevInfoVOList);
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_USER_LIST_ERROR,version,responeAc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ //锐捷
|
|
|
+ Date day = new Date();
|
|
|
+ SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String currentDate = sdf.format(day);
|
|
|
+
|
|
|
+ Date date = null;
|
|
|
+ try {
|
|
|
+ date = sdf.parse(currentDate);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ long timestamp = date.getTime();
|
|
|
+ String[] oldDateArr = acDevInfoDTO.getUpdateTime().split(" ");
|
|
|
+ Date oldDate = null;
|
|
|
+ try {
|
|
|
+ oldDate = sdf.parse(oldDateArr[0]);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ long oldTimestamp = oldDate.getTime();
|
|
|
+
|
|
|
+ String networkIP = "https://api.cloud.ruijie.com.cn";
|
|
|
+ if (timestamp != oldTimestamp){
|
|
|
+ //获取token
|
|
|
+ String url = networkIP+"/oauth2/access_token?grant_type=client_credential&client_id="+appid+"&client_secret="+secret;
|
|
|
+ System.out.println("=====进来====");
|
|
|
+ String respone = null;
|
|
|
+ try {
|
|
|
+ respone = toolUtils.sendHttp("get",url,null,4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+// AcDevInfoVO responeAc = new AcDevInfoVO();
|
|
|
+// responeAc.setStaNum(0);
|
|
|
+// List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
|
|
|
+// responeAc.setStaList(acDevInfoVOList);
|
|
|
+ if (respone == null){
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_GET_TOKEN_ERROR,version,responeAc);
|
|
|
+ }else {
|
|
|
+ JSONObject tokeRespone = JSON.parseObject(respone);
|
|
|
+ Integer code = tokeRespone.getInteger("code");
|
|
|
+ if (code == 0){
|
|
|
+ //成功
|
|
|
+ String access_token = tokeRespone.getString("access_token");
|
|
|
+ String refresh_token = tokeRespone.getString("refresh_token");
|
|
|
+ SimpleDateFormat upSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String updateTime = upSdf.format(day);
|
|
|
+
|
|
|
+ //更新数据
|
|
|
+ AcDevInfoDTO acDevInfo = new AcDevInfoDTO();
|
|
|
+ acDevInfo.setAccessToken(access_token);
|
|
|
+ acDevInfo.setRefreshToken(refresh_token);
|
|
|
+ acDevInfo.setUpdateTime(updateTime);
|
|
|
+ acDevInfo.setId(id);
|
|
|
+ acDevInfoService.updateByAcDevData(acDevInfo);
|
|
|
+ /*1.获取到了token OMxMalZpqxToW9n5oi7w4c5R5r7V9o5Y
|
|
|
+ * 2. 获取用户
|
|
|
+ */
|
|
|
+ Object ruiJieUser = this.getRuiJieUserList(networkIP, access_token, page, count, acDevInfoDTO);
|
|
|
+ if (ruiJieUser instanceof AcDevInfoVO){
|
|
|
+ //成功
|
|
|
+ responeAc = (AcDevInfoVO)ruiJieUser;
|
|
|
+ return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
|
|
|
+ }else {
|
|
|
+ //不成功
|
|
|
+ String errorCode = (String) ruiJieUser;
|
|
|
+ if (errorCode.equals("0389")){
|
|
|
+ //无效的令牌
|
|
|
+ return toolUtils.response(InterfaceResultEnum.INVALID_TOKEN_ERROR,version,responeAc);
|
|
|
+ }else {
|
|
|
+ //刷新令牌失败
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_TOKEN_ERROR,version,responeAc);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ /*1.获取到了token OMxMalZpqxToW9n5oi7w4c5R5r7V9o5Y
|
|
|
+ * 2. 获取用户
|
|
|
+ */
|
|
|
+ Object ruiJieUser = this.getRuiJieUserList(networkIP, acDevInfoDTO.getAccessToken(), page, count, acDevInfoDTO);
|
|
|
+ if (ruiJieUser instanceof AcDevInfoVO){
|
|
|
+ //成功
|
|
|
+ responeAc = (AcDevInfoVO)ruiJieUser;
|
|
|
+ return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
|
|
|
+ }else {
|
|
|
+ //不成功
|
|
|
+ String errorCode = (String) ruiJieUser;
|
|
|
+ if (errorCode.equals("0389")){
|
|
|
+ //无效的令牌
|
|
|
+ return toolUtils.response(InterfaceResultEnum.INVALID_TOKEN_ERROR,version,responeAc);
|
|
|
+ }else {
|
|
|
+ //刷新令牌失败
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_TOKEN_ERROR,version,responeAc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return toolUtils.response(InterfaceResultEnum.AC_USER_LIST_ERROR,version,responeAc);
|
|
|
+ }
|
|
|
+ private Object getRuiJieUserList(String networkIP,String access_token,Integer page,Integer count,AcDevInfoDTO acDevInfoDTO){
|
|
|
+ AcDevInfoVO responeAc = new AcDevInfoVO();
|
|
|
+ responeAc.setStaNum(0);
|
|
|
+ List<AcDevInfoVO> acDevInfoVOList = new ArrayList<>();
|
|
|
+ responeAc.setStaList(acDevInfoVOList);
|
|
|
+
|
|
|
+ String url = networkIP+"/sta/current_users?access_token="+access_token+"&page="+page+"&per_page="+count+"&sn="+acDevInfoDTO.getAcAddress();
|
|
|
+ String userRestult = null;
|
|
|
+ try {
|
|
|
+ userRestult = toolUtils.sendHttp("get",url,null,6, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ if (userRestult == null){
|
|
|
+ return "0703";
|
|
|
+ //return toolUtils.response(InterfaceResultEnum.AC_TOKEN_ERROR,version,responeAc);
|
|
|
+ }else {
|
|
|
+ JSONObject parseObject = JSON.parseObject(userRestult);
|
|
|
+ Integer reCode = parseObject.getInteger("code");
|
|
|
+ if (reCode == 0) {
|
|
|
+ //成功
|
|
|
+ Integer total = parseObject.getInteger("count");
|
|
|
+ JSONArray jsonArray = parseObject.getJSONArray("list");
|
|
|
+ //List<AcDevInfoVO> userList = new ArrayList<>();
|
|
|
+ for (Object value : jsonArray) {
|
|
|
+ AcDevInfoVO acDevInfoVO = new AcDevInfoVO();
|
|
|
+ JSONObject item = (JSONObject) value;
|
|
|
+ String mac = item.getString("mac");
|
|
|
+ if (mac == null) {
|
|
|
+ acDevInfoVO.setMac("");
|
|
|
+ } else {
|
|
|
+ acDevInfoVO.setMac(mac);
|
|
|
+ }
|
|
|
+ String macinfo = item.getString("manufacture");
|
|
|
+ if (macinfo == null) {
|
|
|
+ acDevInfoVO.setMacInfo("");
|
|
|
+ } else {
|
|
|
+ acDevInfoVO.setMacInfo(macinfo);
|
|
|
+ }
|
|
|
+ acDevInfoVO.setRxRate(item.getLong("uplinkRate"));
|
|
|
+ acDevInfoVO.setTxRate(item.getLong("downlinkRate"));
|
|
|
+ acDevInfoVO.setRxPackets(item.getLong("wifiUp"));
|
|
|
+ acDevInfoVO.setTxPackets(item.getLong("wifiDown"));
|
|
|
+ acDevInfoVO.setVlan("");
|
|
|
+ String radio = item.getString("capability");
|
|
|
+ if (radio == null) {
|
|
|
+ acDevInfoVO.setRadio("");
|
|
|
+ } else {
|
|
|
+ acDevInfoVO.setRadio(radio);
|
|
|
+ }
|
|
|
+ String signal = item.getString("rssi");
|
|
|
+ if (signal == null) {
|
|
|
+ acDevInfoVO.setSignal("");
|
|
|
+ } else {
|
|
|
+ acDevInfoVO.setSignal(signal);
|
|
|
+ }
|
|
|
+ acDevInfoVO.setLastTime("");
|
|
|
+ acDevInfoVO.setApMac("");
|
|
|
+ String ssid = item.getString("ssid");
|
|
|
+ if (ssid == null) {
|
|
|
+ acDevInfoVO.setSsid("");
|
|
|
+ } else {
|
|
|
+ acDevInfoVO.setSsid(ssid);
|
|
|
+ }
|
|
|
+ String deviceAliasName = item.getString("deviceAliasName");
|
|
|
+ if (deviceAliasName == null) {
|
|
|
+ acDevInfoVO.setName("");
|
|
|
+ } else {
|
|
|
+ acDevInfoVO.setName(deviceAliasName);
|
|
|
+ }
|
|
|
+ acDevInfoVOList.add(acDevInfoVO);
|
|
|
+ }
|
|
|
+ responeAc.setStaNum(total);
|
|
|
+ responeAc.setStaList(acDevInfoVOList);
|
|
|
+ return responeAc;
|
|
|
+ //return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,responeAc);
|
|
|
+ } else {
|
|
|
+ //无效的token
|
|
|
+ return "0389";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //get/post的请求
|
|
|
+ private String getPassword(String networkIP){
|
|
|
+ Random random = new Random();
|
|
|
+ int min = 10000;
|
|
|
+ int max = 99999999;
|
|
|
+ Integer randcode = random.nextInt(max-min) + min;
|
|
|
+ String url = "http://"+networkIP+"/api/login?randtime="+randcode;
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.put("randtime",randcode);
|
|
|
+ try {
|
|
|
+ //获取随机码
|
|
|
+ String respone = toolUtils.sendHttp("get", url, jsonObject.toString(), 4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,null);
|
|
|
+ if (respone == null){
|
|
|
+ return "获取随机码失败";
|
|
|
+ }else {
|
|
|
+ JSONObject responeObject = JSON.parseObject(respone);
|
|
|
+ Integer ret = responeObject.getInteger("ret");
|
|
|
+ if (ret == 1){
|
|
|
+ String msg = responeObject.getString("msg");
|
|
|
+ //登录 - post
|
|
|
+ url = "http://"+networkIP+"/api/login";
|
|
|
+ //帐号: admin , 密码: changemeplease
|
|
|
+
|
|
|
+ String pwdMd5 = DigestUtils.md5DigestAsHex("changemeplease".getBytes()); //md5加密
|
|
|
+ String joinCode = DigestUtils.md5DigestAsHex((pwdMd5+msg).getBytes()); //md5加密
|
|
|
+
|
|
|
+ JSONObject body = new JSONObject();
|
|
|
+ body.put("loginid","admin");
|
|
|
+ body.put("passwd",joinCode);
|
|
|
+
|
|
|
+ String passJson = toolUtils.sendHttp("post",url,body.toString(),4, ToolUtils.ContentTypeEnum.CONTENT_TYPE_JSON,cookie);
|
|
|
+ if (passJson == null){
|
|
|
+ return "登录失败";
|
|
|
+ }else {
|
|
|
+ JSONObject passObject = JSON.parseObject(passJson);
|
|
|
+ Integer passRet = passObject.getInteger("ret");
|
|
|
+ if (passRet == 1){
|
|
|
+ return "登录成功";
|
|
|
+ }else {
|
|
|
+ return "登录失败";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ return "获取随机码失败";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+// private function initCul()
|
|
|
+// {
|
|
|
+// //$this->initCul();
|
|
|
+//
|
|
|
+// //初始化
|
|
|
+// $this->curl = curl_init();
|
|
|
+// $content = $this->getRandCode();
|
|
|
+//
|
|
|
+// if (empty($content)) return '1604'; //获取随机码失败
|
|
|
+// $code = json_decode($content,true);
|
|
|
+// //获取密码
|
|
|
+// $this->getPassword($code['msg']);
|
|
|
+// if (empty($this->result)) return '1908'; //登录失败
|
|
|
+//
|
|
|
+// }
|
|
|
+// //获取密码
|
|
|
+// private function getPassword($code){
|
|
|
+//
|
|
|
+// $this->url = 'http://'.$this->networkIP.'/api/login';
|
|
|
+//
|
|
|
+// $this->header = array(
|
|
|
+// 'Content-Type: application/x-www-form-urlencoded'
|
|
|
+// );
|
|
|
+// //帐号: admin , 密码: changemeplease
|
|
|
+// $pwdMd5 = md5('changemeplease');
|
|
|
+// $joinCode = md5($pwdMd5.$code);
|
|
|
+//
|
|
|
+// $body = array('loginid'=>'admin','passwd'=>$joinCode);
|
|
|
+//
|
|
|
+// //发送json
|
|
|
+// //$data = json_encode($body, true);
|
|
|
+// $cookieSuccess = dirname(__FILE__)."/cookie.tmp";
|
|
|
+//
|
|
|
+// curl_setopt($this->curl, CURLOPT_COOKIEJAR, $cookieSuccess);
|
|
|
+// //发送请求
|
|
|
+// $this->result = $this->curlSendCmd($body,'POST');
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取随机码 - get请求
|
|
|
+// private function getRandCode(){
|
|
|
+// $randcode = rand(10000,99999999);
|
|
|
+//
|
|
|
+// $this->url = 'http://'.$this->networkIP.'/api/login?randtime='.$randcode;
|
|
|
+//
|
|
|
+// //1.创建一个新cURL资源
|
|
|
+// $this->curl = curl_init();
|
|
|
+//
|
|
|
+// //设置抓取的url
|
|
|
+// curl_setopt($this->curl, CURLOPT_URL, $this->url);
|
|
|
+// curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
|
|
|
+// curl_setopt($this->curl, CURLOPT_HEADER, 0);
|
|
|
+//
|
|
|
+// //设置超时时间
|
|
|
+// curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 0);
|
|
|
+// curl_setopt($this->curl, CURLOPT_TIMEOUT, 3); //timeout in seconds
|
|
|
+//
|
|
|
+//
|
|
|
+// //执行命令
|
|
|
+// $data = curl_exec($this->curl);
|
|
|
+//
|
|
|
+// return $data;
|
|
|
+//
|
|
|
+// }
|
|
|
}
|