diff options
Diffstat (limited to 'src/org/apache/http/impl/client/DefaultRedirectHandler.java')
-rw-r--r-- | src/org/apache/http/impl/client/DefaultRedirectHandler.java | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/src/org/apache/http/impl/client/DefaultRedirectHandler.java b/src/org/apache/http/impl/client/DefaultRedirectHandler.java deleted file mode 100644 index 0811b28..0000000 --- a/src/org/apache/http/impl/client/DefaultRedirectHandler.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/client/DefaultRedirectHandler.java $ - * $Revision: 673450 $ - * $Date: 2008-07-02 10:35:05 -0700 (Wed, 02 Jul 2008) $ - * - * ==================================================================== - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.http.impl.client; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.http.Header; -import org.apache.http.HttpHost; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.ProtocolException; -import org.apache.http.client.CircularRedirectException; -import org.apache.http.client.RedirectHandler; -import org.apache.http.client.params.ClientPNames; -import org.apache.http.client.utils.URIUtils; -import org.apache.http.params.HttpParams; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.ExecutionContext; - - -/** - * Default implementation of {@link RedirectHandler}. - * - * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> - * - * - * <!-- empty lines to avoid svn diff problems --> - * @version $Revision: 673450 $ - * - * @since 4.0 - */ -public class DefaultRedirectHandler implements RedirectHandler { - - private final Log log = LogFactory.getLog(getClass()); - - private static final String REDIRECT_LOCATIONS = "http.protocol.redirect-locations"; - - public DefaultRedirectHandler() { - super(); - } - - public boolean isRedirectRequested( - final HttpResponse response, - final HttpContext context) { - if (response == null) { - throw new IllegalArgumentException("HTTP response may not be null"); - } - int statusCode = response.getStatusLine().getStatusCode(); - switch (statusCode) { - case HttpStatus.SC_MOVED_TEMPORARILY: - case HttpStatus.SC_MOVED_PERMANENTLY: - case HttpStatus.SC_SEE_OTHER: - case HttpStatus.SC_TEMPORARY_REDIRECT: - return true; - default: - return false; - } //end of switch - } - - public URI getLocationURI( - final HttpResponse response, - final HttpContext context) throws ProtocolException { - if (response == null) { - throw new IllegalArgumentException("HTTP response may not be null"); - } - //get the location header to find out where to redirect to - Header locationHeader = response.getFirstHeader("location"); - if (locationHeader == null) { - // got a redirect response, but no location header - throw new ProtocolException( - "Received redirect response " + response.getStatusLine() - + " but no location header"); - } - String location = locationHeader.getValue(); - if (this.log.isDebugEnabled()) { - this.log.debug("Redirect requested to location '" + location + "'"); - } - - URI uri; - try { - uri = new URI(location); - } catch (URISyntaxException ex) { - throw new ProtocolException("Invalid redirect URI: " + location, ex); - } - - HttpParams params = response.getParams(); - // rfc2616 demands the location value be a complete URI - // Location = "Location" ":" absoluteURI - if (!uri.isAbsolute()) { - if (params.isParameterTrue(ClientPNames.REJECT_RELATIVE_REDIRECT)) { - throw new ProtocolException("Relative redirect location '" - + uri + "' not allowed"); - } - // Adjust location URI - HttpHost target = (HttpHost) context.getAttribute( - ExecutionContext.HTTP_TARGET_HOST); - if (target == null) { - throw new IllegalStateException("Target host not available " + - "in the HTTP context"); - } - - HttpRequest request = (HttpRequest) context.getAttribute( - ExecutionContext.HTTP_REQUEST); - - try { - URI requestURI = new URI(request.getRequestLine().getUri()); - URI absoluteRequestURI = URIUtils.rewriteURI(requestURI, target, true); - uri = URIUtils.resolve(absoluteRequestURI, uri); - } catch (URISyntaxException ex) { - throw new ProtocolException(ex.getMessage(), ex); - } - } - - if (params.isParameterFalse(ClientPNames.ALLOW_CIRCULAR_REDIRECTS)) { - - RedirectLocations redirectLocations = (RedirectLocations) context.getAttribute( - REDIRECT_LOCATIONS); - - if (redirectLocations == null) { - redirectLocations = new RedirectLocations(); - context.setAttribute(REDIRECT_LOCATIONS, redirectLocations); - } - - URI redirectURI; - if (uri.getFragment() != null) { - try { - HttpHost target = new HttpHost( - uri.getHost(), - uri.getPort(), - uri.getScheme()); - redirectURI = URIUtils.rewriteURI(uri, target, true); - } catch (URISyntaxException ex) { - throw new ProtocolException(ex.getMessage(), ex); - } - } else { - redirectURI = uri; - } - - if (redirectLocations.contains(redirectURI)) { - throw new CircularRedirectException("Circular redirect to '" + - redirectURI + "'"); - } else { - redirectLocations.add(redirectURI); - } - } - - return uri; - } - -} |