From: <asa...@us...> - 2012-11-20 10:46:27
|
Revision: 7743 http://sourceforge.net/p/htmlunit/code/7743 Author: asashour Date: 2012-11-20 10:46:23 +0000 (Tue, 20 Nov 2012) Log Message: ----------- Support Internationalized Domain Name (IDN). Issue 1459 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-20 09:51:49 UTC (rev 7742) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-20 10:46:23 UTC (rev 7743) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1459"> + Support Internationalized Domain Name (IDN). + </action> <action type="udpate" dev="mguillem"> Change default network timeout from infinite wait to 90 seconds. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2012-11-20 09:51:49 UTC (rev 7742) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2012-11-20 10:46:23 UTC (rev 7743) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit; import java.io.Serializable; +import java.net.IDN; import java.net.URL; import java.util.Collections; import java.util.HashMap; @@ -118,6 +119,15 @@ final String query = (url.getQuery() != null) ? "?" + url.getQuery() : ""; url = buildUrlWithNewFile(url, removeDots(path) + query); } + final String idn = IDN.toASCII(url.getHost()); + if (!idn.equals(url.getHost())) { + try { + url = new URL(url.getProtocol(), idn, url.getPort(), url.getFile()); + } + catch (final Exception e) { + throw new RuntimeException("Cannot change hostname of URL: " + url.toExternalForm(), e); + } + } url_ = url.toExternalForm(); // http://john.smith:secret@localhost Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java 2012-11-20 09:51:49 UTC (rev 7742) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java 2012-11-20 10:46:23 UTC (rev 7743) @@ -163,4 +163,16 @@ final WebRequest request = new WebRequest(url); assertEquals("gzip, deflate", request.getAdditionalHeaders().get("Accept-Encoding")); } + + /** + * @throws Exception if the test fails + */ + @Test + public void idn() throws Exception { + final String internationalized = "\u0645\u0635\u0631"; + final URL url = new URL("http://" + internationalized + ".com/" + internationalized); + final WebRequest request = new WebRequest(url); + final URL expected = new URL("http://xn--wgbh1c.com/" + internationalized); + assertEquals(expected, request.getUrl()); + } } |