You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mb...@apache.org on 2003/09/04 04:12:13 UTC

cvs commit: jakarta-commons/httpclient/src/test/org/apache/commons/httpclient TestMethodsRedirectNoHost.java NoHostHttpConnectionManager.java

mbecke      2003/09/03 19:12:13

  Modified:    httpclient/src/java/org/apache/commons/httpclient
                        HttpMethodBase.java
               httpclient/src/test/org/apache/commons/httpclient
                        TestMethodsRedirectNoHost.java
                        NoHostHttpConnectionManager.java
  Log:
  Fixes host header redirect bug.
  PR: 22667
  Submitted by: Michael Becke
  
  Revision  Changes    Path
  1.179     +4 -10     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java
  
  Index: HttpMethodBase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v
  retrieving revision 1.178
  retrieving revision 1.179
  diff -u -r1.178 -r1.179
  --- HttpMethodBase.java	3 Sep 2003 02:17:49 -0000	1.178
  +++ HttpMethodBase.java	4 Sep 2003 02:12:13 -0000	1.179
  @@ -1223,12 +1223,6 @@
           }
           int port = conn.getPort();
   
  -        if (getRequestHeader("host") != null) {
  -            LOG.debug(
  -                "Request to add Host header ignored: header already added");
  -            return;
  -        }
  -
           // Note: RFC 2616 uses the term "internet host name" for what goes on the
           // host line.  It would seem to imply that host should be blank if the
           // host is a number instead of an name.  Based on the behavior of web
  
  
  
  1.8       +9 -10     jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodsRedirectNoHost.java
  
  Index: TestMethodsRedirectNoHost.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodsRedirectNoHost.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TestMethodsRedirectNoHost.java	12 Aug 2003 02:35:17 -0000	1.7
  +++ TestMethodsRedirectNoHost.java	4 Sep 2003 02:12:13 -0000	1.8
  @@ -209,17 +209,16 @@
       }
   
       public void testRedirectDifferentHost() throws Exception {
  -        conn = new SimpleHttpConnection("oldhost", 80);
  +        
           addRedirectResponse("http://newhost/newfile");
           addOkResponse();
  -        conn.open();
   
           HttpMethod method = new SimpleHttpMethod("/oldfile");
           method.setFollowRedirects(true);
  -        method.execute(new HttpState(), conn);
  -        Header locationHeader = method.getResponseHeader("Location");
  -        assertEquals(302, method.getStatusCode());
  -        assertEquals("/oldfile", method.getPath());
  +        client.executeMethod(method);
  +        assertEquals(200, method.getStatusCode());
  +        assertEquals("/newfile", method.getPath());
  +        assertEquals("newhost", method.getRequestHeader("host").getValue());
       }
   
       public void testRedirectDifferentPort() throws Exception {
  
  
  
  1.2       +26 -3     jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/NoHostHttpConnectionManager.java
  
  Index: NoHostHttpConnectionManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/NoHostHttpConnectionManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NoHostHttpConnectionManager.java	12 Aug 2003 02:35:17 -0000	1.1
  +++ NoHostHttpConnectionManager.java	4 Sep 2003 02:12:13 -0000	1.2
  @@ -20,7 +20,7 @@
       private HttpConnection connection;
   
       public NoHostHttpConnectionManager() { 
  -        this.connection = new SimpleHttpConnection();
  +        setConnection(new SimpleHttpConnection());
       }
   
       /**
  @@ -28,22 +28,45 @@
        */
       public void setConnection(HttpConnection connection) {
           this.connection = connection;
  +        connection.setHttpConnectionManager(this);
       }
   
       public HttpConnection getConnection(HostConfiguration hostConfiguration) {
  +        
  +        // make sure the host and proxy are correct for this connection
  +        // close it and set the values if they are not
  +        if (!hostConfiguration.hostEquals(connection)
  +            || !hostConfiguration.proxyEquals(connection)) {
  +                
  +            if (connection.isOpen()) {
  +                connection.close();
  +            }
  +
  +            connection.setHost(hostConfiguration.getHost());
  +            connection.setVirtualHost(hostConfiguration.getVirtualHost());
  +            connection.setPort(hostConfiguration.getPort());
  +            connection.setProtocol(hostConfiguration.getProtocol());
  +            connection.setLocalAddress(hostConfiguration.getLocalAddress());
  +
  +            connection.setProxyHost(hostConfiguration.getProxyHost());
  +            connection.setProxyPort(hostConfiguration.getProxyPort());
  +        } else {
  +            finishLastResponse(connection);
  +        }
  +        
           return connection;
       }
   
       public HttpConnection getConnection(HostConfiguration hostConfiguration, long timeout)
           throws HttpException {
  -        return connection;
  +        return getConnection(hostConfiguration);
       }
   
       public HttpConnection getConnectionWithTimeout(
           HostConfiguration hostConfiguration,
           long timeout)
           throws ConnectTimeoutException {
  -        return connection;
  +        return getConnection(hostConfiguration);
       }
   
       public void releaseConnection(HttpConnection conn) {