From: <rb...@us...> - 2018-07-16 19:03:51
|
Revision: 15470 http://sourceforge.net/p/htmlunit/code/15470 Author: rbri Date: 2018-07-16 19:03:46 +0000 (Mon, 16 Jul 2018) Log Message: ----------- next step in our endless encoding fight Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.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 17:46:31 UTC (rev 15469) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2018-07-16 19:03:46 UTC (rev 15470) @@ -28,7 +28,6 @@ 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; @@ -287,24 +286,14 @@ private HttpUriRequest makeHttpMethod(final WebRequest webRequest, final HttpClientBuilder httpClientBuilder) throws URISyntaxException { - final Charset charset = webRequest.getCharset(); final HttpContext httpContext = getHttpContext(); + final Charset encCharset = webRequest.getUrlEncodingCharset(); // 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; - 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); - } + final URL url = UrlUtils.encodeUrl(webRequest.getUrl(), false, encCharset); URI uri = UrlUtils.toURI(url, escapeQuery(url.getQuery())); if (getVirtualHost() != null) { @@ -311,14 +300,16 @@ uri = URI.create(getVirtualHost()); } + final Charset charset = webRequest.getCharset(); final HttpRequestBase httpMethod = buildHttpMethod(webRequest.getHttpMethod(), uri); setProxy(httpMethod, webRequest); + if (!(httpMethod instanceof HttpEntityEnclosingRequest)) { // this is the case for GET as well as TRACE, DELETE, OPTIONS and HEAD if (!webRequest.getRequestParameters().isEmpty()) { final List<NameValuePair> pairs = webRequest.getRequestParameters(); final org.apache.http.NameValuePair[] httpClientPairs = NameValuePair.toHttpClient(pairs); - final String query = URLEncodedUtils.format(Arrays.asList(httpClientPairs), charset); + final String query = URLEncodedUtils.format(Arrays.asList(httpClientPairs), encCharset); uri = UrlUtils.toURI(url, query); httpMethod.setURI(uri); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2018-07-16 17:46:31 UTC (rev 15469) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2018-07-16 19:03:46 UTC (rev 15470) @@ -1337,7 +1337,7 @@ WebAssert.notNull("parameters", parameters); url = UrlUtils.encodeUrl(url, getBrowserVersion().hasFeature(URL_MINIMAL_QUERY_ENCODING), - webRequest.getCharset()); + webRequest.getUrlEncodingCharset()); webRequest.setUrl(url); if (LOG.isDebugEnabled()) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2018-07-16 17:46:31 UTC (rev 15469) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2018-07-16 19:03:46 UTC (rev 15470) @@ -23,6 +23,7 @@ import java.net.IDN; import java.net.URL; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -430,6 +431,21 @@ } /** + * Returns the character set to use to encode the url params. + * @return the character set to use to encode the url params + */ + public Charset getUrlEncodingCharset() { + if (HttpMethod.GET == getHttpMethod() + || HttpMethod.DELETE == getHttpMethod() + || HttpMethod.HEAD == getHttpMethod() + || HttpMethod.OPTIONS == getHttpMethod() + || HttpMethod.TRACE == getHttpMethod()) { + return StandardCharsets.UTF_8; + } + return charset_; + } + + /** * Returns a string representation of this object. * @return a string representation of this object */ |