aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Hawke <paul.hawke@gmail.com>2014-04-24 00:02:28 -0500
committerPaul Hawke <paul.hawke@gmail.com>2014-04-24 00:02:28 -0500
commitb4360559711467cfc752e60bf424b81afcb088f5 (patch)
tree403388587d993600c3cd672dea6e5ff431a95429
parent79cd900bd6099d688c5374691a750bc94a8dd464 (diff)
parente9a1b5310ed98d7c80095fbefd856a0b1277a1d2 (diff)
downloadnanohttpd-b4360559711467cfc752e60bf424b81afcb088f5.tar.gz
Merge pull request #106 from fabecc/master
Improve POST method management in case of no parameter entry in the post...
-rw-r--r--core/src/main/java/fi/iki/elonen/NanoHTTPD.java11
-rw-r--r--core/src/test/java/fi/iki/elonen/HttpPostRequestTest.java16
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 {