You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ol...@apache.org on 2005/02/22 11:00:28 UTC

svn commit: r154822 - in jakarta/commons/proper/httpclient/trunk/src: java/org/apache/commons/httpclient/ test/org/apache/commons/httpclient/ test/org/apache/commons/httpclient/params/

Author: olegk
Date: Tue Feb 22 02:00:23 2005
New Revision: 154822

URL: http://svn.apache.org/viewcvs?view=rev&rev=154822
Log:
PR #33541 (Problem getting the HTTPClient to use HTTP 1.0 with a proxy server)

Changelog:
* Fixed the problem with host level parameters having no effect on HTTP CONNECT methods

Contributed by Oleg Kalnichevski

Added:
    jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestParamsAll.java
    jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestSSLTunnelParams.java
Modified:
    jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/ConnectMethod.java
    jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpMethodDirector.java
    jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestNoHost.java

Modified: jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/ConnectMethod.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/ConnectMethod.java?view=diff&r1=154821&r2=154822
==============================================================================
--- jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/ConnectMethod.java (original)
+++ jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/ConnectMethod.java Tue Feb 22 02:00:23 2005
@@ -1,7 +1,7 @@
 /*
  * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/ConnectMethod.java,v 1.29 2004/06/24 21:39:52 mbecke Exp $
  * $Revision: 1.29 $
- * $Date: 2004/06/24 21:39:52 $
+ * $Date$
  *
  * ====================================================================
  *
@@ -42,7 +42,7 @@
  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
  * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  * @since 2.0
- * @version $Revision: 1.29 $ $Date: 2004/06/24 21:39:52 $
+ * @version $Revision: 1.29 $ $Date$
  */
 public class ConnectMethod extends HttpMethodBase {
     
@@ -170,7 +170,8 @@
             buffer.append(':'); 
             buffer.append(port); 
         }
-        buffer.append(" HTTP/1.1"); 
+        buffer.append(" "); 
+        buffer.append(getEffectiveVersion()); 
         String line = buffer.toString();
         conn.printLine(line, getParams().getHttpElementCharset());
         if (Wire.HEADER_WIRE.enabled()) {

Modified: jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpMethodDirector.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpMethodDirector.java?view=diff&r1=154821&r2=154822
==============================================================================
--- jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpMethodDirector.java (original)
+++ jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/HttpMethodDirector.java Tue Feb 22 02:00:23 2005
@@ -1,7 +1,7 @@
 /*
  * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/HttpMethodDirector.java,v 1.34 2005/01/14 19:40:39 olegk Exp $
  * $Revision: 1.34 $
- * $Date: 2005/01/14 19:40:39 $
+ * $Date$
  *
  * ====================================================================
  *
@@ -458,7 +458,7 @@
         throws IOException, HttpException {
 
         this.connectMethod = new ConnectMethod();
-        this.connectMethod.getParams().setDefaults(this.params);
+        this.connectMethod.getParams().setDefaults(this.hostConfiguration.getParams());
         
         int code;
         for (;;) {

Modified: jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestNoHost.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestNoHost.java?view=diff&r1=154821&r2=154822
==============================================================================
--- jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestNoHost.java (original)
+++ jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestNoHost.java Tue Feb 22 02:00:23 2005
@@ -1,7 +1,7 @@
 /*
  * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/test/org/apache/commons/httpclient/TestNoHost.java,v 1.48 2004/11/20 17:56:39 olegk Exp $
  * $Revision: 1.48 $
- * $Date: 2004/11/20 17:56:39 $
+ * $Date$
  * ====================================================================
  *
  *  Copyright 1999-2004 The Apache Software Foundation
@@ -33,7 +33,7 @@
 
 import org.apache.commons.httpclient.auth.TestAuthAll;
 import org.apache.commons.httpclient.cookie.TestCookieAll;
-import org.apache.commons.httpclient.params.TestHttpParams;
+import org.apache.commons.httpclient.params.TestParamsAll;
 
 /**
  * Tests that don't require any external host.
@@ -43,7 +43,7 @@
  *
  * @author Rodney Waldhoff
  * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
- * @version $Revision: 1.48 $ $Date: 2004/11/20 17:56:39 $
+ * @version $Revision: 1.48 $ $Date$
  */
 public class TestNoHost extends TestCase {
 
@@ -87,7 +87,7 @@
         suite.addTest(TestIdleConnectionTimeout.suite());
         suite.addTest(TestMethodAbort.suite());
         // Preferences
-        suite.addTest(TestHttpParams.suite());
+        suite.addTest(TestParamsAll.suite());
         suite.addTest(TestVirtualHost.suite());        
         // URIs
         suite.addTest(TestURI.suite());

Added: jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestParamsAll.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestParamsAll.java?view=auto&rev=154822
==============================================================================
--- jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestParamsAll.java (added)
+++ jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestParamsAll.java Tue Feb 22 02:00:23 2005
@@ -0,0 +1,55 @@
+/*
+ * $Header$
+ * $Revision$
+ * $Date$
+ * ====================================================================
+ *
+ *  Copyright 1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+package org.apache.commons.httpclient.params;
+
+import junit.framework.*;
+
+/**
+ * @author Oleg Kalnichevski 
+ * 
+ * @version $Id$
+ */
+public class TestParamsAll extends TestCase {
+
+    public TestParamsAll(String testName) {
+        super(testName);
+    }
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite();
+        suite.addTest(TestHttpParams.suite());
+        suite.addTest(TestSSLTunnelParams.suite());
+        return suite;
+    }
+
+    public static void main(String args[]) {
+        String[] testCaseName = { TestParamsAll.class.getName() };
+        junit.textui.TestRunner.main(testCaseName);
+    }
+
+}

Added: jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestSSLTunnelParams.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestSSLTunnelParams.java?view=auto&rev=154822
==============================================================================
--- jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestSSLTunnelParams.java (added)
+++ jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/params/TestSSLTunnelParams.java Tue Feb 22 02:00:23 2005
@@ -0,0 +1,191 @@
+/*
+ * $Header$
+ * $Revision$
+ * $Date$
+ * ====================================================================
+ *
+ *  Copyright 1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.commons.httpclient.params;
+
+import java.io.IOException;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.commons.httpclient.FeedbackService;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClientTestBase;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.HttpVersion;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.server.HttpRequestHandler;
+import org.apache.commons.httpclient.server.SimpleHttpServerConnection;
+import org.apache.commons.httpclient.server.SimpleRequest;
+import org.apache.commons.httpclient.server.SimpleResponse;
+
+/**
+ * Tunnelling proxy configuration.
+ *
+ * @author Oleg Kalnichevski
+ * 
+ * @version $Id$
+ */
+public class TestSSLTunnelParams extends HttpClientTestBase {
+
+    // ------------------------------------------------------------ Constructor
+    public TestSSLTunnelParams(final String testName) throws IOException {
+        super(testName);
+        setUseProxy(true);
+        setUseSSL(true);
+    }
+
+    // ------------------------------------------------------------------- Main
+    public static void main(String args[]) {
+        String[] testCaseName = { TestSSLTunnelParams.class.getName() };
+        junit.textui.TestRunner.main(testCaseName);
+    }
+
+    // ------------------------------------------------------- TestCase Methods
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite(TestSSLTunnelParams.class);
+        return suite;
+    }
+
+    
+    static class HttpVersionHandler implements HttpRequestHandler {
+        
+        public HttpVersionHandler() {
+            super();
+        }
+
+        public boolean processRequest(
+                final SimpleHttpServerConnection conn,
+                final SimpleRequest request) throws IOException
+            {
+                HttpVersion ver = request.getRequestLine().getHttpVersion();
+                if (ver.equals(HttpVersion.HTTP_1_0)) {
+                    return false;
+                } else {
+                    SimpleResponse response = new SimpleResponse();
+                    response.setStatusLine(ver, HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED);
+                    response.addHeader(new Header("Proxy-Connection", "close"));
+                    conn.setKeepAlive(false);
+                    // Make sure the request body is fully consumed
+                    request.getBodyBytes();
+                    conn.writeResponse(response);
+                    return true;
+                }
+            }
+        
+    }
+   
+    /**
+     * Tests correct proparation of HTTP params from the client to
+     * CONNECT method.
+     */
+    public void testTunnellingParamsAgentLevel() throws IOException {
+        this.proxy.addHandler(new HttpVersionHandler());
+        this.server.setHttpService(new FeedbackService());
+
+        this.client.getParams().setVersion(HttpVersion.HTTP_1_1);
+        GetMethod httpget = new GetMethod("/test/");
+        try {
+            this.client.executeMethod(httpget);
+            assertNotNull(httpget.getStatusLine());
+            assertEquals(HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED, 
+                    httpget.getStatusLine().getStatusCode());
+        } finally {
+            httpget.releaseConnection();
+        }
+
+        this.client.getParams().setVersion(HttpVersion.HTTP_1_0);
+        httpget = new GetMethod("/test/");
+        try {
+            this.client.executeMethod(httpget);
+            assertNotNull(httpget.getStatusLine());
+            assertEquals(HttpStatus.SC_OK, 
+                    httpget.getStatusLine().getStatusCode());
+        } finally {
+            httpget.releaseConnection();
+        }
+    }
+
+    /**
+     * Tests correct proparation of HTTP params from the host config to
+     * CONNECT method.
+     */
+    public void testTunnellingParamsHostLevel() throws IOException {
+        this.proxy.addHandler(new HttpVersionHandler());
+        this.server.setHttpService(new FeedbackService());
+
+        this.client.getHostConfiguration().getParams().setParameter(
+                HttpMethodParams.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
+        GetMethod httpget = new GetMethod("/test/");
+        try {
+            this.client.executeMethod(httpget);
+            assertNotNull(httpget.getStatusLine());
+            assertEquals(HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED, 
+                    httpget.getStatusLine().getStatusCode());
+        } finally {
+            httpget.releaseConnection();
+        }
+
+        this.client.getHostConfiguration().getParams().setParameter(
+                HttpMethodParams.PROTOCOL_VERSION, HttpVersion.HTTP_1_0);
+        httpget = new GetMethod("/test/");
+        try {
+            this.client.executeMethod(httpget);
+            assertNotNull(httpget.getStatusLine());
+            assertEquals(HttpStatus.SC_OK, 
+                    httpget.getStatusLine().getStatusCode());
+        } finally {
+            httpget.releaseConnection();
+        }
+    }
+
+    /**
+     * Tests ability to use HTTP/1.0 to execute CONNECT method and HTTP/1.1 to
+     * execute methods once the tunnel is established.
+     */
+    public void testTunnellingParamsHostHTTP10AndMethodHTTP11() throws IOException {
+        this.proxy.addHandler(new HttpVersionHandler());
+        this.server.setHttpService(new FeedbackService());
+
+        this.client.getHostConfiguration().getParams().setParameter(
+                HttpMethodParams.PROTOCOL_VERSION, HttpVersion.HTTP_1_0);
+        GetMethod httpget = new GetMethod("/test/");
+        httpget.getParams().setVersion(HttpVersion.HTTP_1_1);
+        try {
+            this.client.executeMethod(httpget);
+            assertNotNull(httpget.getStatusLine());
+            assertEquals(HttpStatus.SC_OK, 
+                    httpget.getStatusLine().getStatusCode());
+            assertEquals(HttpVersion.HTTP_1_1, 
+                    httpget.getEffectiveVersion());
+        } finally {
+            httpget.releaseConnection();
+        }
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org