From: <rb...@us...> - 2017-06-14 19:29:34
|
Revision: 14610 http://sourceforge.net/p/htmlunit/code/14610 Author: rbri Date: 2017-06-14 19:29:31 +0000 (Wed, 14 Jun 2017) Log Message: ----------- fix header for form get request Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HttpWebConnection2Test.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2017-06-14 19:29:02 UTC (rev 14609) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2017-06-14 19:29:31 UTC (rev 14610) @@ -243,11 +243,14 @@ String referer = htmlPage.getUrl().toExternalForm(); request.setAdditionalHeader("Referer", referer); - if (browser.hasFeature(FORM_SUBMISSION_HEADER_ORIGIN)) { + + if (HttpMethod.POST == method + && browser.hasFeature(FORM_SUBMISSION_HEADER_ORIGIN)) { referer = StringUtils.stripEnd(referer, "/"); request.setAdditionalHeader("Origin", referer); } - if (browser.hasFeature(FORM_SUBMISSION_HEADER_CACHE_CONTROL_MAX_AGE)) { + if (HttpMethod.POST == method + && browser.hasFeature(FORM_SUBMISSION_HEADER_CACHE_CONTROL_MAX_AGE)) { request.setAdditionalHeader("Cache-Control", "max-age=0"); } if (browser.hasFeature(FORM_SUBMISSION_HEADER_CACHE_CONTROL_NO_CACHE)) { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HttpWebConnection2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HttpWebConnection2Test.java 2017-06-14 19:29:02 UTC (rev 14609) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HttpWebConnection2Test.java 2017-06-14 19:29:31 UTC (rev 14610) @@ -50,7 +50,80 @@ */ @Test @NotYetImplemented(IE) - public void post() throws Exception { + public void formGet() throws Exception { + final String html = "<html><body><form action='foo' method='get' accept-charset='iso-8859-1'>\n" + + "<input name='text1' value='me &amp; you'>\n" + + "<textarea name='text2'>Hello\nworld!</textarea>\n" + + "<input type='submit' id='submit'>\n" + + "</form></body></html>"; + + getMockWebConnection().setDefaultResponse(""); + final WebDriver driver = loadPage2(html, URL_FIRST); + driver.findElement(By.id("submit")).click(); + + // better would be to look at the HTTP traffic directly + // rather than to examine a request that has been rebuilt but... + final WebRequest lastRequest = getMockWebConnection().getLastWebRequest(); + + assertSame(ISO_8859_1, lastRequest.getCharset()); + assertEquals(null, lastRequest.getProxyHost()); + assertEquals(null, lastRequest.getRequestBody()); + assertEquals(URL_FIRST + "foo", lastRequest.getUrl()); + + String expectedHeaders = ""; + if (getBrowserVersion().isChrome()) { + expectedHeaders = "Connection: keep-alive\n" + + "Host: localhost:" + PORT + "\n" + + "Referer: http://localhost:" + PORT + "/\n" + + "Upgrade-Insecure-Requests: 1\n" + + "User-Agent: " + getBrowserVersion().getUserAgent() + "\n"; + } + if (getBrowserVersion().isFirefox()) { + if (getBrowserVersion().getBrowserVersionNumeric() < 52) { + expectedHeaders = "Connection: keep-alive\n" + + "Host: localhost:" + PORT + "\n" + + "Referer: http://localhost:" + PORT + "/\n" + + "User-Agent: " + getBrowserVersion().getUserAgent() + "\n"; + } + else { + expectedHeaders = "Connection: keep-alive\n" + + "Host: localhost:" + PORT + "\n" + + "Referer: http://localhost:" + PORT + "/\n" + + "Upgrade-Insecure-Requests: 1\n" + + "User-Agent: " + getBrowserVersion().getUserAgent() + "\n"; + } + } + if (getBrowserVersion().isIE()) { + expectedHeaders = "Connection: keep-alive\n" + + "DNT: 1\n" + + "Host: localhost:" + PORT + "\n" + + "Referer: http://localhost:" + PORT + "/\n" + + "User-Agent: " + getBrowserVersion().getUserAgent() + "\n"; + } + assertEquals(expectedHeaders, headersToString(lastRequest)); + + assertEquals(FormEncodingType.URL_ENCODED, lastRequest.getEncodingType()); + assertEquals(HttpMethod.GET, lastRequest.getHttpMethod()); + assertEquals(0, lastRequest.getProxyPort()); + final List<NameValuePair> parameters = lastRequest.getRequestParameters(); + assertEquals(2, parameters.size()); + for (final NameValuePair pair : parameters) { + if ("text1".equals(pair.getName())) { + assertEquals("me & you", pair.getValue()); + } + else { + assertEquals("Hello\r\nworld!", pair.getValue()); + } + } + } + + /** + * Tests a simple POST request. + * @throws Exception if the test fails + */ + @Test + @NotYetImplemented(IE) + public void formPost() throws Exception { final String html = "<html><body><form action='foo' method='post' accept-charset='iso-8859-1'>\n" + "<input name='text1' value='me &amp; you'>\n" + "<textarea name='text2'>Hello\nworld!</textarea>\n" @@ -71,7 +144,7 @@ assertEquals(URL_FIRST + "foo", lastRequest.getUrl()); String expectedHeaders = ""; - if (getBrowserVersion().isChrome() || getBrowserVersion().isFirefox()) { + if (getBrowserVersion().isChrome()) { expectedHeaders = "Cache-Control: max-age=0\n" + "Connection: keep-alive\n" + "Content-Length: 48\n" |