xcguoyu 2019-10-21
<?php /** host dev http://192.168.163.132|web.hudong.cn master http://hudong.qianfanyun.com auth url /session/create password xxxx username xxxxx return /\S+/ http get /test */ class Gapi { public $host = ''; public $url = ''; public $type = ''; public $header = []; public $params = []; public $data = []; public function __construct() { if (isset($_GET['c'])) { $config = file_get_contents("./{$_GET['c']}"); } else { $config = file_get_contents("./config"); } preg_match_all('/\S+(\r|\n[\S|\t]+.*)+/', $config, $contentOneArray, PREG_PATTERN_ORDER); foreach ($contentOneArray[0] as $key => $value) { $this->data = array_merge($this->data, $this->buildOne($value)); } } public function buildOne($content) { $arr = []; preg_match_all('/\S+/', $content, $res, PREG_PATTERN_ORDER); $key = $res[0][0]; $arr[$key] = []; for ($i = 1; $i < count($res[0]); $i++) { if ($i % 2 == 1) { $arr[$key][$res[0][$i]] = ""; } else { $arr[$key][$res[0][$i - 1]] = $res[0][$i]; } } return $arr; } public function run() { $this->buildHost(); $this->buildAuth(); $this->buildUrl(); $res = $this->curl($this->type); if (preg_match('/^{(\w|\W)+}$/', $res)) { echo $this->decodeUnicode(json_encode(json_decode($res), JSON_PRETTY_PRINT)); } else { echo $res; } } public function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', create_function('$matches', 'return iconv("UCS-2BE","UTF-8",pack("H*", $matches[1]));'), $str); } public function buildAuth() { $auth = $this->data['auth']; $this->url = $this->host . $auth['url']; $start = isset($auth['start']) ? $auth['start'] : ''; $return = $auth['return']; unset($auth['url']); unset($auth['return']); $this->params = $auth; $postContent = $this->curl('post'); preg_match($return, $postContent, $res); if (!isset($res[0])) { throw new \Exception("auth error:\n" . $postContent . "\n" . json_encode($this), 4324); } if ($start == "Bearer") { $start .= ' '; } array_push($this->header, "Authorization: " . $start . $res[0]); } public function buildHost() { $key = "dev"; if ( isset($_GET["t"]) && $_GET["t"] == 'm' ) { $key = 'master'; } $dev = explode('|', $this->data['host'][$key]); $this->host = $dev[0]; if (isset($dev[1])) { array_push($this->header, "host:{$dev[1]}"); } } public function buildUrl() { $http = $this->data['http']; foreach ($http as $key => $value) { $this->type = $key; break; } $this->url = $this->host . $http[$this->type]; if ($this->type != "get") { $this->buildParams(); } } public function buildParams() { $http = $this->data['http']; unset($http[$this->type]); $this->params = $http; } public function curl($type) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_HTTPHEADER, $this->header); switch ($type) { case 'post': curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $this->params); break; case 'put': curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, $this->params); break; default: break; } $file_contents = curl_exec($ch); curl_close($ch); return $file_contents; } } $gapi = new Gapi(); $gapi->run();