api 测试auth问题的php脚本

<?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();

相关推荐