123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>PostmanWeb</title>
- <script src="vue.js"></script>
- <script src="jquery.min.js"></script>
- <style>
- .line {
- border: 1px solid #cccccc;
- border-collapse: collapse;
- }
- </style>
- </head>
- <body>
- <h1>PostmanWeb</h1>
- <table id="postman" style="width:100%;">
- <tr>
- <td colspan="2" style="padding-bottom:20px;">
- Collection:<textarea rows="2" cols="50" v-model="txt_Collection"></textarea>
- Environment:<textarea rows="2" cols="50" v-model="txt_Env"></textarea>
- <br />
- <input type="file" id="fileCollection" onchange="file_onchange(event,'collection');" style="display:none;">
- <input type="file" id="fileEnv" onchange="file_onchange(event,'env');" style="display:none;">
- <input type="button" value="打开Collection文件" onclick="fileCollection.click();" />
- <input type="button" value="打开Environment文件" onclick="fileEnv.click();" />
- <input type="button" value="↓" onclick="loadFromTxt();" />
- <input type="button" value="↑" onclick="saveToTxt();" />
- <input type="button" value="保存至localStorage" onclick="saveToLocalStorage();" />
- <input type="button" value="下载Collection" onclick="SaveFile(vpostman.txt_Collection,'Sers.postman_collection.json');" />
- <input type="button" value="下载Environment" onclick="SaveFile(vpostman.txt_Env,'Sers.postman_environment.json');" />
- <input type="button" value="发送请求" onclick="sendRequest();" />
- </td>
- </tr>
- <tr style="vertical-align:top;padding-top:20px;">
- <td>
- <div id="menu" style="overflow:auto;width:500px;height:600px;white-space: nowrap;">
- <div v-for="item1 in collection.item" style="">
- <div style="">{{item1.name}}</div>
- <div v-for="item2 in item1.item" style="padding-left:10px;"><a href="#" @click="select(item2)">{{item2.name}}</a></div>
- </div>
- </div>
- </td>
- <td>
- <table>
- <tr>
- <td><a href="#" onclick="vpostman.ui_Env = formatJson(vpostman.ui_Env);" title="点击作为json格式化">env</a></td>
- <td>
- <textarea rows="6" cols="100" v-model="ui_Env"></textarea>
- </td>
- </tr>
- <tr>
- <td>name</td>
- <td>
- <textarea rows="1" cols="100" v-model="curRequest.name"></textarea>
- </td>
- </tr>
- <tr>
- <td>url</td>
- <td>
- <textarea rows="1" cols="100" v-model="ui_Request.url"></textarea>
- </td>
- </tr>
- <tr>
- <td>method</td>
- <td>
- <textarea rows="1" cols="100" v-model="ui_Request.method"></textarea>
- </td>
- </tr>
- <tr>
- <td><a href="#" onclick="vpostman.ui_Request.header = formatJson(vpostman.ui_Request.header);" title="点击作为json格式化">header</a></td>
- <td>
- <textarea rows="6" cols="100" v-model="ui_Request.header"></textarea>
- </td>
- </tr>
- <tr>
- <td>
- <a href="#" onclick="vpostman.ui_Request.body = formatJson(vpostman.ui_Request.body);" title="点击作为json格式化">body</a><br />
- <input type="checkbox" id="chkBodyAsPlain" /><label for="chkBodyAsPlain" title="直接发送字符串,不进行eval转换">发送原文</label>
- </td>
- <td>
- <textarea rows="10" cols="100" v-model="ui_Request.body"></textarea>
- </td>
- </tr>
- <tr>
- <td>
- <a href="#" onclick="vpostman.ui_Request.response = formatJson(vpostman.ui_Request.response);" title="点击作为json格式化">response</a><br />
- <input type="checkbox" id="chkAutoFormatResponse" checked="checked" /><label for="chkAutoFormatResponse" title="自动作为json格式化">自动格式化</label>
- </td>
- <td>
- <textarea rows="14" cols="100" v-model="ui_Request.response"></textarea>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <script type="text/javascript">
- /*
- --------------------------
- | txt |
- --------------------------
- | ui-menu | ui_Env |
- | | ui_Request |
- | | |
- --------------------------
- */
- var vpostman = new Vue({
- el: '#postman',
- data: {
- txt_Collection: '{}',
- txt_Env: '{}',
- collection: {},
- curRequest: {},
- ui_Env: '',
- ui_Request: {}
- }, methods: {
- select: function (item) {
- try {
- saveRequestToCollection();
- this.curRequest = item;
- renderUiRequest();
- } catch (e) {
- alert('错误:' + e.message);
- }
- }
- }
- });
- function renderUiRequest() {
- var item = vpostman.curRequest;
- var ui_item = vpostman.ui_Request;
- //ui_item.name = item.name;
- ui_item.url = item.request.url.raw;
- ui_item.method = item.request.method;
- //header
- var oriHeader = item.request.header;
- var header = {};
- for (var t in oriHeader) {
- var e = oriHeader[t];
- header[e.key] = e.value;
- }
- ui_item.header = JSON.stringify(header, null, 2);
- ui_item.body = item.request.body.raw;
- ui_item.response = item.response;
- }
- function saveRequestToCollection() {
- var item = vpostman.curRequest;
- var ui_item = vpostman.ui_Request;
- if (!item || !item.request || !ui_item) return;
- //item.name = ui_item.name ;
- item.request.url.raw = ui_item.url;
- item.request.method = ui_item.method;
- //header
- var header = ui_item.header;
- header = eval('(' + header + ')');
- var oriHeader = [];
- for (var k in header) {
- oriHeader.push({ type: "text", key: k, value: header[k] });
- }
- item.request.header = oriHeader;
- item.request.body.raw = ui_item.body;
- item.response = ui_item.response;
- }
- function onGetResponse(response) {
- //if (typeof (response) != 'string') response = JSON.stringify(response, null, 2);
- if ($('#chkAutoFormatResponse').is(':checked')) {
- try {
- var json = eval('(' + response + ')');
- response = JSON.stringify(json, null, 2);
- } catch (e) {
- console.log('error:' + e.message);
- }
- }
- vpostman.ui_Request.response = response;
- }
- function sendRequest() {
- try {
- var req = vpostman.ui_Request;
- req.response = '';
-
-
- var param = { url: req.url, type: req.method, header: req.header, data: req.body };
- var envReg = [];
- var env = eval('(' + vpostman.ui_Env + ')');
- for (var k in env) {
- envReg.push({ key: k, reg: new RegExp("\\{\\{" + k + "\\}\\}", "g"), value: env[k] });
- }
- for (var i in param) {
- var v = param[i];
- if (!v) continue;
- for (var t in envReg) {
- var item = envReg[t];
- v = v.replace(item.reg, item.value);
- }
- param[i] = v;
- }
- if (param.header) {
- param.header = eval('(' + param.header + ')');
- }
- if (param.data) {
- if (!$('#chkBodyAsPlain').is(':checked')) {
- try {
- param.data = eval('(' + param.data + ')');
- } catch (e) {
- }
- }
- }
- param.onSuc = onGetResponse;
- ajax(param);
- } catch (e) {
- alert('出错:' + e.message);
- }
- }
- </script>
- <script type="text/javascript">
- //(x.x)ajax
- // ajax({ url:'http://a.com/a',type:'POST',header:{},data:{},onSuc:function(apiRet){ } });
- // ajax({ api:'/a',type:'POST',header:{},data:{},onSuc:function(apiRet){ } });
- function ajax(param) {
- var url = param.url, type = param.type || 'GET', header = param.header, data = param.data, onSuc = param.onSuc;
- if (!url) {
- if (param.api) {
- url = 'http://' + ssConfig.apiHost + param.api;
- }
- }
- if (type == 'GET') {
- if (typeof (data) == 'object') {
- for (var k in data) {
- var v = data[k];
- if (typeof (v) != 'string') {
- data[k] = JSON.stringify(v);
- }
- }
- }
- }
- if (data != null && data != undefined && type != 'GET') {
- if (typeof (data) != 'string') {
- data = JSON.stringify(data);
- }
- }
- $.ajax({
- type: type,
- data: data,
- url: url,
- dataType: "text",
- // 允许携带证书
- //xhrFields: {
- // withCredentials: true
- //},
- // 允许跨域
- crossDomain: true,
- headers: header,
- //beforeSend: function (request) {
- // if (header) {
- // for (var key in header) {
- // request.setRequestHeader(key, header[key]);
- // }
- // }
- //},
- success: onSuc
- });
- }
- function formatJson(jsonStr) {
- try {
- var json = eval('(' + jsonStr + ')');
- jsonStr = JSON.stringify(json, null, 2);
- } catch (e) {
- }
- return jsonStr;
- }
- </script>
- <script type="text/javascript">
- //(x.x)ui
- var lastOriEnv;
- //file: { collection:'',env:''}
- function loadPostmanContent(file) {
- //(x.1)
- try {
- if (file.collection)
- vpostman.collection = eval('(' + file.collection + ')');
- } catch (e) {
- alert('出错:' + e.message);
- }
- //(x.2)
- if (file.env) {
- try {
- var env = file.env;
- env = eval('(' + env + ')');
- lastOriEnv = env;
- var ui_Env = {};
- var values = env.values;
- for (var i in values) {
- var v = values[i];
- if (v.enabled === false) continue;
- ui_Env[v.key] = v.value;
- }
- vpostman.ui_Env = JSON.stringify(ui_Env, null, 2);
- } catch (e) {
- alert('出错:' + e.message);
- }
- }
- //(x.3)
- vpostman.curRequest = {};
- vpostman.ui_Request = { response: '' }
- }
- //return: { collection:'',env:''}
- function getPostmanContent() {
- var file = { collection: '', env: '' };
- //(x.1)
- saveRequestToCollection();
- //(x.2)collection
- try {
- file.collection = JSON.stringify(vpostman.collection, null, 2);
- } catch (e) {
- alert('出错:' + e.message);
- }
- //(x.3)env
- try {
- var ui_Env = vpostman.ui_Env;
- if (ui_Env) {
- ui_Env = eval('(' + ui_Env + ')');
- var values = [];
- for (var t in ui_Env) {
- values.push({ enabled: true, key: t, value: ui_Env[t] });
- }
- lastOriEnv.values = values;
- file.env = JSON.stringify(lastOriEnv, null, 2);
- }
- } catch (e) {
- alert('出错:' + e.message);
- }
- return file;
- }
- </script>
- <script type="text/javascript">
- //(x.x)txt
- function loadFromTxt() {
- loadPostmanContent({
- collection: vpostman.txt_Collection,
- env: vpostman.txt_Env
- });
- }
- function saveToTxt() {
- var file = getPostmanContent();
- vpostman.txt_Collection = file.collection;
- vpostman.txt_Env = file.env;
- }
- </script>
- <script type="text/javascript">
- //(x.x)localStorage
- //saveToLocalStorage
- function saveToLocalStorage() {
- var file = getPostmanContent();
- localStorage.postmanCollection = file.collection;
- localStorage.postmanEnvironment = file.env;
- }
- //load init data
- if (window.localStorage && localStorage.postmanCollection) {
- //loadFromLocalStorage
- try {
- loadPostmanContent({
- collection: localStorage.postmanCollection,
- env: localStorage.postmanEnvironment
- });
- saveToTxt();
- } catch (e) {
- alert('出错:' + e.message);
- }
- } else {
- //loadFrom postman_collection.json postman_collection.json
- //(x.x.1) postman_collection
- ajax({
- url: 'postman_collection.json', onSuc: function (apiRet) {
- try {
- loadPostmanContent({
- collection: apiRet
- });
- saveToTxt();
- } catch (e) {
- alert('出错:' + e.message);
- }
- }
- });
- //(x.x.2) postman_environment
- ajax({
- url: 'postman_environment.json', onSuc: function (apiRet) {
- try {
- loadPostmanContent({
- env: apiRet
- });
- saveToTxt();
- } catch (e) {
- alert('出错:' + e.message);
- }
- }
- });
- }
- </script>
- <script type="text/javascript">
- //(x.x)下载文件
- function SaveFile(content, filename) { // 创建隐藏的可***链接
- var eleLink = document.createElement('a');
- eleLink.download = filename;
- eleLink.style.display = 'none'; // 字符内容转变成blob地址
- var blob = new Blob([content]);
- eleLink.href = URL.createObjectURL(blob); // 触发点击
- document.body.appendChild(eleLink);
- eleLink.click(); // 然后移除
- document.body.removeChild(eleLink);
- };
- </script>
- <script type="text/javascript">
- //(x.x)打开文件
- function file_onchange(event, paramName) {
- var file = event.target.files[0];
- var reader = new FileReader();
- reader.readAsText(file);
- reader.onload = function () {
- var fileContent = this.result;
- var postmanContent = {};
- postmanContent[paramName] = fileContent;
- loadPostmanContent(postmanContent);
- saveToTxt();
- }
- };
- </script>
- </body>
- </html>
|