]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | <!DOCTYPE HTML>\r |
2 | <html xmlns="http://www.w3.org/1999/xhtml">\r | |
3 | <head>\r | |
4 | <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\r | |
5 | <title>HTTP method test</title>\r | |
6 | <style type="text/css" media="screen">\r | |
7 | body {background:#eee; margin:0%; padding:0%; padding-top:0%; padding-left:1%}\r | |
8 | .cform {margin:0%; padding:0%; padding-top:0%; padding-left:2%;}\r | |
9 | h3 {margin:0%; padding:0%; padding-top:0%; padding-left:0%;}\r | |
10 | td {vertical-align:top; text-align:left;}\r | |
11 | </style>\r | |
12 | <script type="text/javascript"><![CDATA[\r | |
13 | \r | |
14 | function getParams() {\r | |
15 | var result = {};\r | |
16 | var kvPairs = location.search.slice(1).split('&');\r | |
17 | \r | |
18 | kvPairs.forEach(\r | |
19 | function(kvPair) {\r | |
20 | kvPair = kvPair.split('=');\r | |
21 | result[kvPair[0]] = kvPair[1] || '';\r | |
22 | }\r | |
23 | );\r | |
24 | \r | |
25 | return result;\r | |
26 | }\r | |
27 | \r | |
28 | function noBody() {\r | |
29 | document.getElementById("body_none").checked = true;\r | |
30 | }\r | |
31 | \r | |
32 | function load() {\r | |
33 | var params = getParams();\r | |
34 | var method = params["method"];\r | |
35 | if (!method) {\r | |
36 | method = "GET";\r | |
37 | }\r | |
38 | var path = params["path"];\r | |
39 | if (!path) {\r | |
40 | path = "";\r | |
41 | }\r | |
42 | \r | |
43 | var elem = document.getElementById('h1');\r | |
44 | elem.innerHTML = "HTTP method test page";\r | |
45 | \r | |
46 | document.getElementById("proto_http").checked = (window.location.protocol != "https:");\r | |
47 | document.getElementById("proto_https").checked = (window.location.protocol == "https:");\r | |
48 | document.getElementById("server").value = location.host;\r | |
49 | document.getElementById("resource").value = path;\r | |
50 | \r | |
51 | setRadioValue("method", method);\r | |
52 | noBody();\r | |
53 | }\r | |
54 | \r | |
55 | function setRadioValue(elmname, value) {\r | |
56 | var elms = document.getElementsByName(elmname);\r | |
57 | var len = elms.length;\r | |
58 | var ret = false;\r | |
59 | \r | |
60 | for (var i=0; i<len; i++) {\r | |
61 | elms[i].checked = (elms[i].value == value);\r | |
62 | ret |= elms[i].checked;\r | |
63 | }\r | |
64 | return ret;\r | |
65 | }\r | |
66 | \r | |
67 | function getRadioValue(elmname) {\r | |
68 | \r | |
69 | var elms = document.getElementsByName(elmname);\r | |
70 | var len = elms.length;\r | |
71 | var ret = "";\r | |
72 | \r | |
73 | for (var i=0; i<len; i++) {\r | |
74 | if (elms[i].checked) {\r | |
75 | ret = elms[i].value;\r | |
76 | }\r | |
77 | }\r | |
78 | return ret;\r | |
79 | }\r | |
80 | \r | |
81 | function sendreq() {\r | |
82 | var proto = getRadioValue("protocol");\r | |
83 | var host = document.getElementById("server").value;\r | |
84 | var res = document.getElementById("resource").value;\r | |
85 | var addr = proto + "://" + host + "/" + res;\r | |
86 | var meth = getRadioValue("method");\r | |
87 | var body = getRadioValue("body");\r | |
88 | \r | |
89 | xmlhttp = new XMLHttpRequest();\r | |
90 | if (!xmlhttp) {\r | |
91 | alert("XMLHttpRequest not available");\r | |
92 | window.history.back();\r | |
93 | }\r | |
94 | \r | |
95 | xmlhttp.open(meth,addr,true);\r | |
96 | \r | |
97 | if (body == '*') {\r | |
98 | body = null;\r | |
99 | } else {\r | |
100 | if (body == '**') {\r | |
101 | var body_bytes = document.getElementById("body_bytes").value;\r | |
102 | body_bytes = parseInt(Number(body_bytes) || 0) || 0;\r | |
103 | body = "";\r | |
104 | for (var i=0; i<body_bytes; i++) {\r | |
105 | var ascii = Math.floor((Math.random() * 94) + 32);\r | |
106 | body = body + String.fromCharCode(ascii);\r | |
107 | }\r | |
108 | }\r | |
109 | xmlhttp.setRequestHeader("Content-Length", body.length);\r | |
110 | }\r | |
111 | \r | |
112 | xmlhttp.onreadystatechange = function()\r | |
113 | {\r | |
114 | var laddr = addr;\r | |
115 | var lmeth = meth;\r | |
116 | var blen = "";\r | |
117 | if (body) {\r | |
118 | blen = "\nWith " + body.length + " bytes body data";\r | |
119 | }\r | |
120 | \r | |
121 | if (xmlhttp.readyState == 4)\r | |
122 | {\r | |
123 | alert(lmeth + " " + laddr + blen + "\n\nResponse: " + xmlhttp.status + "\n\n" + xmlhttp.responseText);\r | |
124 | }\r | |
125 | }\r | |
126 | \r | |
127 | xmlhttp.send(body);\r | |
128 | \r | |
129 | }\r | |
130 | \r | |
131 | ]]></script>\r | |
132 | \r | |
133 | </head>\r | |
134 | <body onload="load()">\r | |
135 | \r | |
136 | <h1 id='h1'>Fatal error: Javascript not available!</h1>\r | |
137 | \r | |
138 | <h2>Test parameters</h2>\r | |
139 | <form lass="cform">\r | |
140 | \r | |
141 | <h3>Protocol</h3>\r | |
142 | <input id="proto_http" type="radio" name="protocol" value="http" /> http <br />\r | |
143 | <input id="proto_https" type="radio" name="protocol" value="https" /> https\r | |
144 | \r | |
145 | <h3>Server/Host</h3>\r | |
146 | <input id="server" type="text" name="server" value="" />\r | |
147 | \r | |
148 | <h3>Resource</h3>\r | |
149 | <input id="resource" type="text" name="resource" value="" />\r | |
150 | \r | |
151 | <h3>Method</h3>\r | |
152 | <!-- http://www.restpatterns.org/HTTP_Methods -->\r | |
153 | <!-- http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html -->\r | |
154 | <table style="border-spacing:15px 0px;">\r | |
155 | <tr>\r | |
156 | <td><a href="http://tools.ietf.org/html/rfc7231#section-4.2.1">Save Methods</a></td>\r | |
157 | <td>"Unsave" <a href="http://tools.ietf.org/html/rfc7231#section-4.2.2">Idempotent Methods</a></td>\r | |
158 | <td>Non-Idempotent Methods</td>\r | |
159 | <td>Special</td>\r | |
160 | </tr>\r | |
161 | <tr>\r | |
162 | <td>\r | |
163 | <input id="method_opt" type="radio" name="method" value="OPTIONS" onclick="noBody()" /> OPTIONS <br />\r | |
164 | <input id="method_get" type="radio" name="method" value="GET" onclick="noBody()" /> GET <br />\r | |
165 | <input id="method_hea" type="radio" name="method" value="HEAD" onclick="noBody()" /> HEAD <br />\r | |
166 | <input id="method_tra" type="radio" name="method" value="TRACE" /> TRACE <br />\r | |
167 | <input id="method_pro" type="radio" name="method" value="PROPFIND" /> PROPFIND <br />\r | |
168 | </td>\r | |
169 | <td>\r | |
170 | <input id="method_put" type="radio" name="method" value="PUT" /> PUT <br />\r | |
171 | <input id="method_del" type="radio" name="method" value="DELETE" /> DELETE <br />\r | |
172 | <input id="method_cop" type="radio" name="method" value="COPY" /> COPY <br />\r | |
173 | <input id="method_cop" type="radio" name="method" value="MOVE" /> MOVE <br />\r | |
174 | <input id="method_ppa" type="radio" name="method" value="PROPPATCH" /> PROPPATCH <br />\r | |
175 | <input id="method_unl" type="radio" name="method" value="UNLOCK" /> UNLOCK <br />\r | |
176 | </td>\r | |
177 | <td>\r | |
178 | <input id="method_pos" type="radio" name="method" value="POST" /> POST <br />\r | |
179 | <input id="method_pat" type="radio" name="method" value="PATCH" /> PATCH <br />\r | |
180 | <input id="method_mkc" type="radio" name="method" value="MKCOL" /> MKCOL <br />\r | |
181 | <input id="method_loc" type="radio" name="method" value="LOCK" /> LOCK <br />\r | |
182 | </td>\r | |
183 | <td>\r | |
184 | <input id="method_con" type="radio" name="method" value="CONNECT" /> CONNECT <br />\r | |
185 | <input id="method_userdef" type="radio" name="method" value="INVALID" /> <input id="method_name" type="text" name="method_name" value="INVALID" oninput="var elem = document.getElementById('method_userdef'); elem.checked = true; elem.value=value" /> <br />\r | |
186 | </td>\r | |
187 | </tr>\r | |
188 | </table>\r | |
189 | \r | |
190 | <h3>Body data</h3>\r | |
191 | <input id="body_none" type="radio" name="body" value="*" /> No body data <br />\r | |
192 | <input id="body_10" type="radio" name="body" value="1234567890" /> 10 Bytes ("1234567890") <br />\r | |
193 | <input id="body_rnd" type="radio" name="body" value="**" /> <input id="body_bytes" type="number" name="body_bytes" value="100" min="0" step="0" max="999999999" oninput="document.getElementById('body_rnd').checked = true" /> Bytes random data <br />\r | |
194 | \r | |
195 | <h3>Submit</h3>\r | |
196 | <input id="send" type="button" onclick="sendreq()" value="Send request" />\r | |
197 | \r | |
198 | </form>\r | |
199 | \r | |
200 | </body></html>\r |