From: <mgu...@us...> - 2013-10-10 15:39:13
|
Revision: 8643 http://sourceforge.net/p/htmlunit/code/8643 Author: mguillem Date: 2013-10-10 15:39:08 +0000 (Thu, 10 Oct 2013) Log Message: ----------- fixed wrong encoding of multipart form fields (regressions introduced a few weeks ago during upgrade to HttpClient to 4.3) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebDriverTestCase.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2013-10-10 11:42:22 UTC (rev 8642) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2013-10-10 15:39:08 UTC (rev 8643) @@ -294,8 +294,7 @@ buildFilePart((KeyDataPair) pair, builder); } else { - builder.addTextBody(pair.getName(), pair.getValue(), - ContentType.create(webRequest.getCharset())); + builder.addTextBody(pair.getName(), pair.getValue()); } } method.setEntity(builder.build()); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebDriverTestCase.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebDriverTestCase.java 2013-10-10 11:42:22 UTC (rev 8642) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebDriverTestCase.java 2013-10-10 15:39:08 UTC (rev 8643) @@ -489,10 +489,10 @@ webRequest.setAdditionalHeader(headerName, headerValue); } - if ("PUT".equals(request.getMethod()) && request.getContentLength() > 0) { + if (requestParameters.isEmpty() && request.getContentLength() > 0) { final byte[] buffer = new byte[request.getContentLength()]; - request.getInputStream().readLine(buffer, 0, buffer.length); - webRequest.setRequestBody(new String(buffer)); + request.getInputStream().read(buffer, 0, buffer.length); + webRequest.setRequestBody(new String(buffer, webRequest.getCharset())); } else { webRequest.setRequestParameters(requestParameters); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElementTest.java 2013-10-10 11:42:22 UTC (rev 8642) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFormElementTest.java 2013-10-10 15:39:08 UTC (rev 8643) @@ -985,6 +985,28 @@ } /** + * Ensure that Multipart form text fields are correctly encoded. + * This was a regression introduced in 2.12-SNAPSHOT after upgrading to HttpClient to 4.3. + * @throws Exception if the test fails + */ + @Test + public void submitMultipartTextFieldWithRightEncoding() throws Exception { + final String html = "<html><body onload='document.forms[0].submit()'>\n" + + "<form action='foo.html' enctype='multipart/form-data' method='post'>\n" + + " <input name='myField' value='éèêäöü'>\n" + + "</form></body></html>"; + + getMockWebConnection().setDefaultResponse(""); + loadPage2(html); + final String body = getMockWebConnection().getLastWebRequest().getRequestBody(); + final String expected = "Content-Disposition: form-data; name=\"myField\"\r\n" + + "\r\n" + + "éèêäöü"; + + assertTrue("Body: " + body, body.contains(expected)); + } + + /** * Failed as of HtmlUnit-2.7-SNAPSHOT 01.12.2009 as the '#' from the * link together with the fact that submission occurs to the same url * let HtmlUnit think that it as just navigation to an anchor. |