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