|
27 | 27 | import java.util.Arrays; |
28 | 28 | import java.util.Base64; |
29 | 29 | import java.util.Collections; |
30 | | -import java.util.Enumeration; |
| 30 | +import java.util.List; |
31 | 31 |
|
32 | 32 | import javax.servlet.http.Cookie; |
33 | 33 | import javax.servlet.http.HttpServletRequest; |
34 | 34 | import javax.servlet.http.HttpServletResponse; |
35 | 35 |
|
36 | 36 | import org.eclipse.jetty.server.Request; |
37 | 37 | import org.eclipse.jetty.server.handler.AbstractHandler; |
| 38 | +import org.json.JSONArray; |
38 | 39 | import org.json.JSONException; |
39 | 40 | import org.json.JSONObject; |
40 | 41 | import org.slf4j.Logger; |
@@ -92,13 +93,15 @@ public void handle(String target, Request baseRequest, |
92 | 93 | return; |
93 | 94 | } else if (method.equals("GET") && uri.equals("/get")) { |
94 | 95 | Utils.copy(is, Utils.NULL_OUTPUT_STREAM); |
95 | | - // TODO: return JSON blob of request |
96 | | - String content = "Hello, world!"; |
97 | | - servletResponse.setContentLength(content.length()); |
98 | | - servletResponse.setStatus(HttpServletResponse.SC_OK); |
| 96 | + |
| 97 | + JSONObject response = new JSONObject(); |
| 98 | + response.put("args", mapParametersToJSON(request)); |
| 99 | + response.put("headers", mapHeadersToJSON(request)); |
| 100 | + response.put("origin", request.getRemoteAddr()); |
| 101 | + response.put("url", getFullURL(request)); |
| 102 | + |
| 103 | + respondJSON(servletResponse, os, response); |
99 | 104 | baseRequest.setHandled(true); |
100 | | - writer.write(content); |
101 | | - writer.flush(); |
102 | 105 | return; |
103 | 106 | } else if (method.equals("POST") && uri.equals("/post")) { |
104 | 107 | Utils.copy(is, os); |
@@ -208,15 +211,7 @@ public void handle(String target, Request baseRequest, |
208 | 211 | // Method |
209 | 212 | response.put("method", method); |
210 | 213 |
|
211 | | - // Headers |
212 | | - final JSONObject headers = new JSONObject(); |
213 | | - response.put("headers", headers); |
214 | | - |
215 | | - for (Enumeration<String> names = request.getHeaderNames(); |
216 | | - names.hasMoreElements();) { |
217 | | - final String name = names.nextElement(); |
218 | | - headers.put(name, request.getHeader(name)); |
219 | | - } |
| 214 | + response.put("headers", mapHeadersToJSON(request)); |
220 | 215 |
|
221 | 216 | // Body data |
222 | 217 | final ByteArrayOutputStream data = new ByteArrayOutputStream(); |
@@ -288,4 +283,45 @@ private void copyResource(HttpServletResponse response, String resource) |
288 | 283 | Utils.copy(is, response.getOutputStream()); |
289 | 284 | } |
290 | 285 | } |
| 286 | + |
| 287 | + private static JSONObject mapHeadersToJSON(HttpServletRequest request) { |
| 288 | + JSONObject headers = new JSONObject(); |
| 289 | + |
| 290 | + for (String name : Collections.list(request.getHeaderNames())) { |
| 291 | + List<String> values = Collections.list(request.getHeaders(name)); |
| 292 | + if (values.size() == 1) { |
| 293 | + headers.put(name, values.get(0)); |
| 294 | + } else { |
| 295 | + headers.put(name, new JSONArray(values)); |
| 296 | + } |
| 297 | + } |
| 298 | + |
| 299 | + return headers; |
| 300 | + } |
| 301 | + |
| 302 | + private static JSONObject mapParametersToJSON(HttpServletRequest request) { |
| 303 | + JSONObject headers = new JSONObject(); |
| 304 | + |
| 305 | + for (String name : Collections.list(request.getParameterNames())) { |
| 306 | + String[] values = request.getParameterValues(name); |
| 307 | + if (values.length == 1) { |
| 308 | + headers.put(name, values[0]); |
| 309 | + } else { |
| 310 | + headers.put(name, new JSONArray(values)); |
| 311 | + } |
| 312 | + } |
| 313 | + |
| 314 | + return headers; |
| 315 | + } |
| 316 | + |
| 317 | + private static String getFullURL(HttpServletRequest request) { |
| 318 | + StringBuilder requestURL = new StringBuilder( |
| 319 | + request.getRequestURL().toString()); |
| 320 | + String queryString = request.getQueryString(); |
| 321 | + if (queryString == null) { |
| 322 | + return requestURL.toString(); |
| 323 | + } else { |
| 324 | + return requestURL.append('?').append(queryString).toString(); |
| 325 | + } |
| 326 | + } |
291 | 327 | } |
0 commit comments