Skip to content

Commit be26caa

Browse files
committed
Return full information for get endpoint
1 parent 6e41ba6 commit be26caa

1 file changed

Lines changed: 52 additions & 16 deletions

File tree

src/main/java/org/gaul/httpbin/HttpBinHandler.java

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,15 @@
2727
import java.util.Arrays;
2828
import java.util.Base64;
2929
import java.util.Collections;
30-
import java.util.Enumeration;
30+
import java.util.List;
3131

3232
import javax.servlet.http.Cookie;
3333
import javax.servlet.http.HttpServletRequest;
3434
import javax.servlet.http.HttpServletResponse;
3535

3636
import org.eclipse.jetty.server.Request;
3737
import org.eclipse.jetty.server.handler.AbstractHandler;
38+
import org.json.JSONArray;
3839
import org.json.JSONException;
3940
import org.json.JSONObject;
4041
import org.slf4j.Logger;
@@ -92,13 +93,15 @@ public void handle(String target, Request baseRequest,
9293
return;
9394
} else if (method.equals("GET") && uri.equals("/get")) {
9495
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);
99104
baseRequest.setHandled(true);
100-
writer.write(content);
101-
writer.flush();
102105
return;
103106
} else if (method.equals("POST") && uri.equals("/post")) {
104107
Utils.copy(is, os);
@@ -208,15 +211,7 @@ public void handle(String target, Request baseRequest,
208211
// Method
209212
response.put("method", method);
210213

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));
220215

221216
// Body data
222217
final ByteArrayOutputStream data = new ByteArrayOutputStream();
@@ -288,4 +283,45 @@ private void copyResource(HttpServletResponse response, String resource)
288283
Utils.copy(is, response.getOutputStream());
289284
}
290285
}
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+
}
291327
}

0 commit comments

Comments
 (0)