[MJAVADOC-533] <link> entries that point to a resource that requires an
Accept header may be ignored

Add a */* Accept header, that is required by some servers
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
index 5881549..c7467ae 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -19,6 +19,7 @@
  * under the License.

  */

 

+import org.apache.http.HttpHeaders;

 import org.apache.http.HttpHost;

 import org.apache.http.HttpResponse;

 import org.apache.http.HttpStatus;

@@ -32,6 +33,7 @@
 import org.apache.http.conn.params.ConnRoutePNames;

 import org.apache.http.impl.client.DefaultHttpClient;

 import org.apache.http.impl.conn.PoolingClientConnectionManager;

+import org.apache.http.message.BasicHeader;

 import org.apache.http.params.CoreConnectionPNames;

 import org.apache.http.params.CoreProtocolPNames;

 import org.apache.maven.plugin.logging.Log;

@@ -1816,6 +1818,10 @@
         httpClient.getParams().setParameter( CoreProtocolPNames.USER_AGENT,

                                              "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" );

 

+        // Some server reject requests that do not have an Accept header

+        httpClient.getParams().setParameter( ClientPNames.DEFAULT_HEADERS,

+                                             Arrays.asList( new BasicHeader( HttpHeaders.ACCEPT, "*/*" ) ) );

+

         if ( settings != null && settings.getActiveProxy() != null )

         {

             Proxy activeProxy = settings.getActiveProxy();

diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
index 8e9b33f..fa5bfaa 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
@@ -618,6 +618,46 @@
     }

 

     /**

+     * Tests that getRedirectUrl adds an Accept header in HTTP requests. Necessary because some sites like Cloudflare

+     * reject requests without an Accept header.

+     */

+    public void testGetRedirectUrlVerifyHeaders()

+        throws Exception

+    {

+        Server server = null;

+        try

+        {

+            server = new Server( 0 );

+            server.addHandler( new AbstractHandler()

+            {

+                @Override

+                public void handle( String target, HttpServletRequest request, HttpServletResponse response,

+                                    int dispatch )

+                    throws IOException, ServletException

+                {

+                    if ( request.getHeader( "Accept" ) == null )

+                    {

+                        response.setStatus( HttpServletResponse.SC_FORBIDDEN );

+                    }

+                    else

+                    {

+                        response.setStatus( HttpServletResponse.SC_OK );

+                    }

+                    response.getOutputStream().close();

+                }

+            } );

+            server.start();

+

+            URL url = new URI( "http://localhost:" + server.getConnectors()[0].getLocalPort() ).toURL();

+            JavadocUtil.getRedirectUrl( url, new Settings() );

+        }

+        finally

+        {

+            stopSilently( server );

+        }

+    }

+

+    /**

      * Method to test copyJavadocResources()

      *

      * @throws Exception if any