Эх сурвалжийг харах

Merge pull request #63 from tolower/master

在接口编辑页面增加一个在线HTTP接口测试的小功能
star7th 9 жил өмнө
parent
commit
341532ddb2

+ 79 - 1
Application/Home/Controller/PageController.class.php

@@ -87,6 +87,84 @@ class PageController extends BaseController {
         $this->display();        
     }
 
+    //跳转到HTTP接口测试页面
+	public function http_api(){
+		
+		$this->display(); 
+	}
+
+	//处理HTTP测试请求,返回请求接口后的数据
+	public function ajaxHttpApi(){
+		$url=I('url');
+		$method=I('method');
+		$params=I('params');
+		if($method=='get'){
+			$url=$url."?".$params;
+			$return=$this->http_get($url);
+		}else{
+			$return=$this->http_post($url, $params);
+		}
+		echo $return;
+	}
+	/**
+	 * GET 请求
+	 *
+	 * @param string $url        	
+	 */
+	private function http_get($url) {
+		$oCurl = curl_init ();
+		if (stripos ( $url, "https://" ) !== FALSE) {
+			curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYPEER, FALSE );
+			curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYHOST, FALSE );
+		}
+		curl_setopt ( $oCurl, CURLOPT_URL, $url );
+		curl_setopt ( $oCurl, CURLOPT_RETURNTRANSFER, 1 );
+		$sContent = curl_exec ( $oCurl );
+		$aStatus = curl_getinfo ( $oCurl );
+		curl_close ( $oCurl );
+		if (intval ( $aStatus ["http_code"] ) == 200) {
+			return $sContent;
+		} else {
+			return false;
+		}
+	}
+	
+	/**
+	 * POST 请求
+	 *
+	 * @param string $url        	
+	 * @param array $param        	
+	 * @return string content
+	 */
+	private function http_post($url, $param) {
+		$oCurl = curl_init ();
+		if (stripos ( $url, "https://" ) !== FALSE) {
+			curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYPEER, FALSE );
+			curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYHOST, false );
+		}
+		if (is_string ( $param )) {
+			$strPOST = $param;
+		} else {
+			$aPOST = array ();
+			foreach ( $param as $key => $val ) {
+				$aPOST [] = $key . "=" . urlencode ( $val );
+			}
+			$strPOST = join ( "&", $aPOST );
+		}
+		curl_setopt ( $oCurl, CURLOPT_URL, $url );
+		curl_setopt ( $oCurl, CURLOPT_RETURNTRANSFER, 1 );
+		curl_setopt ( $oCurl, CURLOPT_POST, true );
+		curl_setopt ( $oCurl, CURLOPT_POSTFIELDS, $strPOST );
+		$sContent = curl_exec ( $oCurl );
+		$aStatus = curl_getinfo ( $oCurl );
+		curl_close ( $oCurl );
+		if (intval ( $aStatus ["http_code"] ) == 200) {
+			return $sContent;
+		} else {
+			return false;
+		}
+	}
+
     //保存
     public function save(){
         $login_user = $this->checkLogin();
@@ -225,4 +303,4 @@ class PageController extends BaseController {
     }
 
 
-}
+}

+ 1 - 0
Application/Home/View/Page/edit.html

@@ -43,6 +43,7 @@
         <button id="api-doc" tabindex="4" >插入API接口模板</button>
         <button id="database-doc" tabindex="5" >插入数据字典模板</button>
         <button id="jsons" tabindex="7" >JSON转参数表格</button>
+        <a href="?s=home/page/http_api" target="_blank" class="btn" >在线HTTP请求测试</a>
     </div>
     <div id="editormd">
         <textarea id="page_content" style="display:none;" tabindex="6" >{$page.page_content}</textarea>

+ 87 - 0
Application/Home/View/Page/http_api.html

@@ -0,0 +1,87 @@
+<include file="Common/header" />
+<style type="text/css">
+	input{
+		width: 100%;
+	}
+</style>
+<div id="layout" style="width: 70%;margin: auto;">
+	<form class="form-horizontal">
+		<h2 style="text-align: center;">GET和POST测试</h2>
+        <div class="control-group">
+          <div class="controls">
+          	<label >接口地址(如:http://www.abc.com/api/login)</label>
+            <select style="width: 100px;" id="method" >
+            	<option value="post">POST</option>
+            	<option value="get">GET</option>
+            </select>
+            <input type="text" id="url"  placeholder="接口地址" >
+          </div>
+        </div>
+        <div class="control-group">
+          <div class="controls">
+          	<label >参数(如:user_id=121&age=22&date=2016-06-02)</label>
+            <input type="text" id="params" placeholder="参数" >
+          </div>
+        </div>
+        <div class="control-group">
+          <div class="controls">
+            <button type="button" class="btn btn-primary" id="http-submit">提交</button>
+            <button type="reset"  class="btn btn-link" >清除</button>
+          </div>
+        </div>
+        <div class="control-group">
+          <div class="controls">
+          	<label >返回结果</label>
+			<textarea style="width: 100%;height: 300px;" id="http-response"></textarea>
+          </div>
+        </div>
+      </form>
+</div>
+<include file="Common/footer" />
+<script type="text/javascript">
+	$(function () {
+		//格式化json数据
+		function dump(arr,level) { 
+			 var dumped_text = ""; 
+			 if(!level) level = 0; 
+			 
+			 //The padding given at the beginning of the line. 
+			 var level_padding = ""; 
+			 for(var j=0;j<level+1;j++) level_padding += "     "; 
+			 if(typeof(arr) == 'object') { //Array/Hashes/Objects 
+			 	 var i=0;
+				 for(var item in arr) { 
+					 var value = arr[item]; 
+					 if(typeof(value) == 'object') { //If it is an array, 
+						 dumped_text += level_padding + "\"" + item + "\" : \{ \n"; 
+						 dumped_text += dump(value,level+1); 
+					 	 dumped_text +=level_padding +"\}";
+					 } else { 
+					 	dumped_text += level_padding + "\"" + item + "\" : \"" + value + "\""; 
+					 } 
+					 if(i<Object.getOwnPropertyNames(arr).length-1){
+					 	dumped_text+=", \n";
+					 }else{
+					 	dumped_text+=" \n";
+					 }
+					 i++;
+				 } 
+			 } else { //Stings/Chars/Numbers etc. 
+			 	dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; 
+			 } 
+			 return dumped_text; 
+		} 
+		$("#http-submit").on('click',function () {
+			$.post("?s=home/page/ajaxHttpApi",{
+				url:$("#url").val(),
+				method:$("#method").val(),
+				params:$("#params").val()
+			},function (data) {
+				
+				console.log(JSON.parse(data));
+				var text="\{ \n"+dump(JSON.parse(data))+" \}";//整体加个大括号
+				$("#http-response").val(text);
+			});
+		});
+	});
+</script>