From: <rb...@us...> - 2018-07-16 17:45:44
|
Revision: 15467 http://sourceforge.net/p/htmlunit/code/15467 Author: rbri Date: 2018-07-16 17:45:39 +0000 (Mon, 16 Jul 2018) Log Message: ----------- make the encoding of parameters depending on the request type Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2018-07-16 16:18:48 UTC (rev 15466) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2018-07-16 17:45:39 UTC (rev 15467) @@ -28,6 +28,7 @@ import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -288,16 +289,28 @@ final Charset charset = webRequest.getCharset(); final HttpContext httpContext = getHttpContext(); + // Make sure that the URL is fully encoded. IE actually sends some Unicode chars in request // URLs; because of this we allow some Unicode chars in URLs. However, at this point we're // handing things over the HttpClient, and HttpClient will blow up if we leave these Unicode // chars in the URL. - final URL url = UrlUtils.encodeUrl(webRequest.getUrl(), false, charset); + final URL url; + if (HttpMethod.GET == webRequest.getHttpMethod() + || HttpMethod.DELETE == webRequest.getHttpMethod() + || HttpMethod.HEAD == webRequest.getHttpMethod() + || HttpMethod.OPTIONS == webRequest.getHttpMethod() + || HttpMethod.TRACE == webRequest.getHttpMethod()) { + url = UrlUtils.encodeUrl(webRequest.getUrl(), false, StandardCharsets.UTF_8); + } + else { + url = UrlUtils.encodeUrl(webRequest.getUrl(), false, charset); + } URI uri = UrlUtils.toURI(url, escapeQuery(url.getQuery())); if (getVirtualHost() != null) { uri = URI.create(getVirtualHost()); } + final HttpRequestBase httpMethod = buildHttpMethod(webRequest.getHttpMethod(), uri); setProxy(httpMethod, webRequest); if (!(httpMethod instanceof HttpEntityEnclosingRequest)) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2018-07-16 16:18:48 UTC (rev 15466) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2018-07-16 17:45:39 UTC (rev 15467) @@ -36,7 +36,6 @@ import java.net.URLConnection; import java.net.URLDecoder; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; @@ -462,8 +461,6 @@ @SuppressWarnings("unchecked") public <P extends Page> P getPage(final URL url) throws IOException, FailingHttpStatusCodeException { final WebRequest request = new WebRequest(url, getBrowserVersion().getHtmlAcceptHeader()); - request.setCharset(StandardCharsets.UTF_8); - return (P) getPage(getCurrentWindow().getTopWindow(), request); } @@ -884,7 +881,6 @@ if (url != null) { try { final WebRequest request = new WebRequest(url, getBrowserVersion().getHtmlAcceptHeader()); - request.setCharset(StandardCharsets.UTF_8); if (getBrowserVersion().hasFeature(DIALOGWINDOW_REFERER) && openerPage != null) { @@ -1016,7 +1012,6 @@ final HtmlPage openerPage = (HtmlPage) opener.getEnclosedPage(); final WebRequest request = new WebRequest(url, getBrowserVersion().getHtmlAcceptHeader()); - request.setCharset(StandardCharsets.UTF_8); if (getBrowserVersion().hasFeature(DIALOGWINDOW_REFERER) && openerPage != null) { final String referer = openerPage.getUrl().toExternalForm(); |