Skip to content

Commit 2c1d259

Browse files
committed
Add stream-bytes endpoint
1 parent 996bf57 commit 2c1d259

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Java httpbin supports a subset of httpbin endpoints:
2727
- `/absolute-redirect/:n` 302 Absolute redirects _n_ times.
2828
- `/redirect-to?url=foo` 302 Redirects to the _foo_ URL.
2929
- `/stream/:n` Streams _n_ lines of JSON objects.
30+
- `/stream-bytes/:n?chunkSize=c&seed=s` Streams _n_ bytes.
3031
- `/delay/:n` Delays responding for _min(n, 10)_ seconds.
3132
- `/bytes/:n` Generates _n_ random bytes of binary data, accepts optional _seed_ integer parameter.
3233
- `/cookies` Returns the cookies.

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,29 @@ baos, new Deflater(Deflater.DEFAULT_COMPRESSION,
336336
os.flush();
337337
}
338338

339+
baseRequest.setHandled(true);
340+
return;
341+
} else if (method.equals("GET") && uri.startsWith(
342+
"/stream-bytes/")) {
343+
Utils.copy(is, Utils.NULL_OUTPUT_STREAM);
344+
345+
long numBytes = Long.parseLong(uri.substring(
346+
"/stream-bytes/".length()));
347+
348+
int seed = Utils.getIntParameter(request, "seed", -1);
349+
int chunkSize = Utils.getIntParameter(request, "chunkSize",
350+
200);
351+
byte[] buf = new byte[chunkSize];
352+
Random random = seed == -1 ? new Random() : new Random(seed);
353+
354+
servletResponse.setStatus(HttpServletResponse.SC_OK);
355+
356+
for (long i = 0; i < numBytes; i += chunkSize) {
357+
random.nextBytes(buf);
358+
os.write(buf, 0, i + chunkSize > numBytes ?
359+
(int) (numBytes - i) : chunkSize);
360+
}
361+
339362
baseRequest.setHandled(true);
340363
return;
341364
} else if ((method.equals("POST") && uri.equals("/post")) ||

0 commit comments

Comments
 (0)