diff options
-rw-r--r-- | core/src/main/java/fi/iki/elonen/NanoHTTPD.java | 11 | ||||
-rw-r--r-- | core/src/test/java/fi/iki/elonen/HttpPostRequestTest.java | 16 |
2 files changed, 24 insertions, 3 deletions
diff --git a/core/src/main/java/fi/iki/elonen/NanoHTTPD.java b/core/src/main/java/fi/iki/elonen/NanoHTTPD.java index b1d59c3..ba01443 100644 --- a/core/src/main/java/fi/iki/elonen/NanoHTTPD.java +++ b/core/src/main/java/fi/iki/elonen/NanoHTTPD.java @@ -1008,7 +1008,6 @@ public abstract class NanoHTTPD { decodeMultipartData(boundary, fbuf, in, parms, files); } else { - // Handle application/x-www-form-urlencoded String postLine = ""; StringBuilder postLineBuffer = new StringBuilder(); char pbuf[] = new char[512]; @@ -1019,7 +1018,13 @@ public abstract class NanoHTTPD { read = in.read(pbuf); } postLine = postLineBuffer.toString().trim(); - decodeParms(postLine, parms); + // Handle application/x-www-form-urlencoded + if ("application/x-www-form-urlencoded".equalsIgnoreCase(contentType)) { + decodeParms(postLine, parms); + } else if (postLine.length() != 0) { + // Special case for raw POST data => create a special files entry "postData" with raw content data + files.put("postData", postLine); + } } } else if (Method.PUT.equals(method)) { files.put("content", saveTmpFile(fbuf, 0, fbuf.limit())); @@ -1277,7 +1282,7 @@ public abstract class NanoHTTPD { return parms; } - public String getQueryParameterString() { + public String getQueryParameterString() { return queryParameterString; } diff --git a/core/src/test/java/fi/iki/elonen/HttpPostRequestTest.java b/core/src/test/java/fi/iki/elonen/HttpPostRequestTest.java index 522a8c9..3cb37e0 100644 --- a/core/src/test/java/fi/iki/elonen/HttpPostRequestTest.java +++ b/core/src/test/java/fi/iki/elonen/HttpPostRequestTest.java @@ -18,6 +18,22 @@ public class HttpPostRequestTest extends HttpServerTest { public static final String VALUE = "Summer vacation"; public static final String FIELD2 = "location"; public static final String VALUE2 = "Grand Canyon"; + public static final String POST_RAW_CONTENT_FILE_ENTRY = "postData"; + public static final String VALUE_TEST_SIMPLE_RAW_DATA_WITH_AMPHASIS = "Test raw data & Result value"; + + @Test + public void testSimpleRawPostData() throws Exception { + String header = "POST " + URI + " HTTP/1.1\n"; + String content = VALUE_TEST_SIMPLE_RAW_DATA_WITH_AMPHASIS + "\n"; + int size = content.length() + header.length(); + int contentLengthHeaderValueSize = String.valueOf(size).length(); + int contentLength = size + contentLengthHeaderValueSize + CONTENT_LENGTH.length(); + String input = header + CONTENT_LENGTH + (contentLength+4) + "\r\n\r\n" + content; + invokeServer(input); + assertEquals(0, testServer.parms.size()); + assertEquals(1, testServer.files.size()); + assertEquals(VALUE_TEST_SIMPLE_RAW_DATA_WITH_AMPHASIS, testServer.files.get(POST_RAW_CONTENT_FILE_ENTRY)); + } @Test public void testSimplePostWithSingleMultipartFormField() throws Exception { |