mirror of
				https://github.com/nerzhul/ownCloud-SMS-App.git
				synced 2025-10-31 02:17:53 +00:00 
			
		
		
		
	HTTPClient: add redirection follower
This commit is contained in:
		
							parent
							
								
									82d1de3463
								
							
						
					
					
						commit
						8b482f51c4
					
				| @ -22,9 +22,13 @@ import android.net.Uri; | |||||||
| import android.util.Base64; | import android.util.Base64; | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
| 
 | 
 | ||||||
|  | import org.apache.commons.httpclient.Header; | ||||||
| import org.apache.commons.httpclient.HttpClient; | import org.apache.commons.httpclient.HttpClient; | ||||||
| import org.apache.commons.httpclient.HttpMethod; | import org.apache.commons.httpclient.HttpMethod; | ||||||
|  | import org.apache.commons.httpclient.HttpStatus; | ||||||
| import org.apache.commons.httpclient.HttpVersion; | import org.apache.commons.httpclient.HttpVersion; | ||||||
|  | import org.apache.commons.httpclient.URI; | ||||||
|  | import org.apache.commons.httpclient.URIException; | ||||||
| import org.apache.commons.httpclient.cookie.CookiePolicy; | import org.apache.commons.httpclient.cookie.CookiePolicy; | ||||||
| import org.apache.commons.httpclient.params.HttpClientParams; | import org.apache.commons.httpclient.params.HttpClientParams; | ||||||
| import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; | import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; | ||||||
| @ -102,12 +106,51 @@ public class OCHttpClient extends HttpClient { | |||||||
| 				replace("[START]", start.toString()).replace("[LIMIT]", limit.toString())); | 				replace("[START]", start.toString()).replace("[LIMIT]", limit.toString())); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	private int followRedirections(HttpMethod httpMethod) throws IOException { | ||||||
|  | 		int redirectionsCount = 0; | ||||||
|  | 		int status = httpMethod.getStatusCode(); | ||||||
|  | 		while (redirectionsCount < 3 && | ||||||
|  | 				(status == HttpStatus.SC_MOVED_PERMANENTLY || | ||||||
|  | 						status == HttpStatus.SC_MOVED_TEMPORARILY || | ||||||
|  | 						status == HttpStatus.SC_TEMPORARY_REDIRECT) | ||||||
|  | 				) { | ||||||
|  | 			Header location = httpMethod.getResponseHeader("Location"); | ||||||
|  | 			if (location == null) { | ||||||
|  | 				location = httpMethod.getResponseHeader("location"); | ||||||
|  | 			} | ||||||
|  | 			if (location == null) { | ||||||
|  | 				Log.e(TAG, "No valid location header found when redirecting."); | ||||||
|  | 				return 500; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			try { | ||||||
|  | 				httpMethod.setURI(new URI(location.getValue())); | ||||||
|  | 			} catch (URIException e) { | ||||||
|  | 				Log.e(TAG, "Invalid URI in 302 FOUND response"); | ||||||
|  | 				return 500; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			status = executeMethod(httpMethod); | ||||||
|  | 			redirectionsCount++; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if (redirectionsCount >= 3 && status == HttpStatus.SC_MOVED_PERMANENTLY || | ||||||
|  | 				status == HttpStatus.SC_MOVED_TEMPORARILY || | ||||||
|  | 				status == HttpStatus.SC_TEMPORARY_REDIRECT) { | ||||||
|  | 			Log.e(TAG, "Too many redirection done. Aborting, please ensure your server is " + | ||||||
|  | 					"correctly configured"); | ||||||
|  | 			return 400; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return status; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public int execute(HttpMethod req) throws IOException { | 	public int execute(HttpMethod req) throws IOException { | ||||||
| 		String basicAuth = "Basic " + | 		String basicAuth = "Basic " + | ||||||
| 				Base64.encodeToString((_username + ":" + _password).getBytes(), Base64.NO_WRAP); | 				Base64.encodeToString((_username + ":" + _password).getBytes(), Base64.NO_WRAP); | ||||||
| 		//req.setFollowRedirects(true); // App is SIGKILLED by android when doing this... WTF |  | ||||||
| 		req.setDoAuthentication(true); | 		req.setDoAuthentication(true); | ||||||
| 		req.addRequestHeader("Authorization", basicAuth); | 		req.addRequestHeader("Authorization", basicAuth); | ||||||
| 		return executeMethod(req); | 		executeMethod(req); | ||||||
|  | 		return followRedirections(req); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user