From: <rb...@us...> - 2017-06-15 08:31:16
|
Revision: 14611 http://sourceforge.net/p/htmlunit/code/14611 Author: rbri Date: 2017-06-15 08:31:13 +0000 (Thu, 15 Jun 2017) Log Message: ----------- the JDK censors the Origin header - sometimes i really like the JDK Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnection.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnectionTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnection.java 2017-06-14 19:29:31 UTC (rev 14610) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnection.java 2017-06-15 08:31:13 UTC (rev 14611) @@ -42,10 +42,15 @@ * Note: this class is experimental and not mature like {@link HttpWebConnection}. * It doesn't currently support multipart POST. * </p> + * <p>This might not use all headers because the JDK ignores/censors some headers (at lease Origin). + * You can disable this censorship by setting 'sun.net.http.allowRestrictedHeaders' to true + * </p> * * @author Amit Manjhi * @author Marc Guillemot * @author Pieter Herroelen + * @author Ronald Brill + * * @since HtmlUnit 2.8 * @see "http://code.google.com/p/googleappengine/issues/detail?id=3379" */ @@ -94,6 +99,9 @@ connection.setInstanceFollowRedirects(false); // copy the headers from WebRequestSettings + // this might not copy all headers because the JDK ignores/censors some headers + // you can disable this by setting sun.net.http.allowRestrictedHeaders to true + // see UrlFetchWebConnectionTest for some links for (final Entry<String, String> header : webRequest.getAdditionalHeaders().entrySet()) { connection.addRequestProperty(header.getKey(), header.getValue()); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnectionTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnectionTest.java 2017-06-14 19:29:31 UTC (rev 14610) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnectionTest.java 2017-06-15 08:31:13 UTC (rev 14611) @@ -14,6 +14,7 @@ */ package com.gargoylesoftware.htmlunit; +import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -26,6 +27,8 @@ import java.util.Set; import java.util.TreeMap; +import org.junit.AfterClass; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -40,11 +43,42 @@ * * @author Marc Guillemot * @author Pieter Herroelen + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public class UrlFetchWebConnectionTest extends WebServerTestCase { + private static final String allowRestrictedHeaders = System.getProperty("sun.net.http.allowRestrictedHeaders"); + /** + * Setup jdk / HttpURLConnection + * to support all headers (Origin in this case). + * + * see https://stackoverflow.com/questions/8335501/does-httpurlconnection-censor-some-headers-notably-origin + * see https://stackoverflow.com/questions/13255051/ + * setting-origin-and-access-control-request-method-headers-with-jersey-client + */ + @BeforeClass + public static void beforeClass() { + System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); + } + + /** + * Saves HTML and PNG files. + * + * @throws IOException if an error occurs + */ + @AfterClass + public static void saveAll() throws IOException { + if (allowRestrictedHeaders == null) { + System.setProperty("sun.net.http.allowRestrictedHeaders", "false"); + } + else { + System.setProperty("sun.net.http.allowRestrictedHeaders", allowRestrictedHeaders); + } + } + + /** * Tests a simple GET. * @throws Exception if the test fails */ @@ -148,11 +182,14 @@ assertEquals(referenceRequest.getCharset(), newRequest.getCharset()); assertEquals(referenceRequest.getProxyHost(), newRequest.getProxyHost()); assertEquals(referenceRequest.getUrl(), newRequest.getUrl()); - assertEquals(headersToString(referenceRequest), headersToString(newRequest)); assertEquals(referenceRequest.getEncodingType(), newRequest.getEncodingType()); assertEquals(referenceRequest.getHttpMethod(), newRequest.getHttpMethod()); assertEquals(referenceRequest.getProxyPort(), newRequest.getProxyPort()); assertEquals(referenceRequest.getRequestParameters().toString(), newRequest.getRequestParameters().toString()); + + // java U + // https://stackoverflow.com/questions/8335501/does-httpurlconnection-censor-some-headers-notably-origin + assertEquals(headersToString(referenceRequest), headersToString(newRequest)); } private static String headersToString(final WebRequest request) { |