[HtmlUnit] SVN: [15470] trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit

rbri--- via HtmlUnit-develop <[email protected]> Mon, 16 Jul 2018 19:03:50 +0000
Newsgroups gmane.comp.java.htmlunit.devel
Message-ID <[email protected]>
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
      */


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot