Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.qiniu.android.http;
  
  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.impl.client.RedirectLocations;
 import  org.apache.http.params.HttpParams;
 import  org.apache.http.protocol.ExecutionContext;
 import  org.apache.http.protocol.HttpContext;
 
 import java.net.URI;
Created by bailong on 15/5/25.
 
 public final class UpRedirectHandler implements RedirectHandler {
 
     private static final String REDIRECT_LOCATIONS = "http.protocol.redirect-locations";
 
     private static boolean isQiniu(final HttpResponse response){
         return response.getFirstHeader("X-Reqid") != null;
     }
 
     public boolean isRedirectRequested(
             final HttpResponse response,
             final HttpContext context) {
         if (response == null) {
             throw new IllegalArgumentException("HTTP response may not be null");
         }
 
         final int statusCode = response.getStatusLine().getStatusCode();
         switch (statusCode) {
             //upload only allow 303
             case HttpStatus.SC_SEE_OTHER:
                 return isQiniu(response);
             default:
                 return false;
         } //end of switch
     }
 
     public URI getLocationURI(
             final HttpResponse response,
             final HttpContext contextthrows 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"
             );
         }
         //HERE IS THE MODIFIED LINE OF CODE
         String location = locationHeader.getValue().replaceAll(" ""%20");
 
         URI uri;
         try {
             uri = new URI(location);
         } catch (URISyntaxException ex) {
             throw new ProtocolException("Invalid redirect URI: " + locationex);
         }
 
         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(requestURItargettrue);
                 uri = URIUtils.resolve(absoluteRequestURIuri);
             } catch (URISyntaxException ex) {
                 throw new ProtocolException(ex.getMessage(), ex);
             }
        }
        if (params.isParameterFalse(ClientPNames.ALLOW_CIRCULAR_REDIRECTS)) {
            RedirectLocations redirectLocations = (RedirectLocations) context.getAttribute(
                    );
            if (redirectLocations == null) {
                redirectLocations = new RedirectLocations();
                context.setAttribute(redirectLocations);
            }
            URI redirectURI;
            if (uri.getFragment() != null) {
                try {
                    HttpHost target = new HttpHost(
                            uri.getHost(),
                            uri.getPort(),
                            uri.getScheme());
                    redirectURI = URIUtils.rewriteURI(uritargettrue);
                } 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;
    }
New to GrepCode? Check out our FAQ X