Archives pour la catégorie Tips

Eviter l’exception « Too many redirects at URL » sur Google App Engine

Salut,

Ce soir, je vous fais part d’une petite « astuce » qui m’a permis de surpasser les limitations de Google App Engine en matière de redirection. En effet, l’utilisation du service URLFecthService ne supporte pas les pages web avec plus de 5 redirections.

Du coup, j’ai mis au point un petit bout de code pour passer outre cette limitation.

package com.roisoleil.redirectexception;

import java.io.IOException;
import java.net.URL;
import java.util.List;

import com.google.appengine.api.urlfetch.FetchOptions.Builder;
import com.google.appengine.api.urlfetch.HTTPHeader;
import com.google.appengine.api.urlfetch.HTTPMethod;
import com.google.appengine.api.urlfetch.HTTPRequest;
import com.google.appengine.api.urlfetch.HTTPResponse;
import com.google.appengine.api.urlfetch.URLFetchService;
import com.google.appengine.api.urlfetch.URLFetchServiceFactory;

public class RedirectUtils {

	public final static String LOCATION = "Location";

	public final static int REDIRECT_CODE = 301;

	public final static int REDIRECT_CODE_2 = 302;

	public static URL resolveRedirect(URL url, HTTPMethod httpMethod)
			throws IOException {
		URL resolvedURL = url;
		URLFetchService urlFetchService = URLFetchServiceFactory
				.getURLFetchService();
		HTTPResponse httpResponse = urlFetchService.fetch(new HTTPRequest(url,
				httpMethod, Builder.doNotFollowRedirects()));
		if (REDIRECT_CODE == httpResponse.getResponseCode()
				|| REDIRECT_CODE_2 == httpResponse.getResponseCode()) {
			String location = getLocation(httpResponse.getHeaders());
			resolvedURL = resolveRedirect(new URL(location), httpMethod);
		}
		return resolvedURL;
	}

	public static String getLocation(List httpHeaders) {
		HTTPHeader locationHeader = null;
		for (HTTPHeader httpHeader : httpHeaders) {
			if (LOCATION.equals(httpHeader.getName())) {
				locationHeader = httpHeader;
				break;
			}
		}
		return locationHeader.getValue();
	}

}

Le code ne fait que « Fetcher » l’URL souhaitée sans suivre la possible redirection et si il y a redirection continue jusqu’à avoir l’adresse finale.

Pour faire mes tester, j’ai créé une application à cette URL qui permet de tester mon code.

Avec qui fait une boucle de redirection

Avec qui fais appel directiement à URLFecthService

et qui fait appel à mon code avant de faire appel à URLFetchService

Voilà … en espérant que cela aide 😉

Permettre l’exécution en mode sudo sans renseigner le mot de passe

Salut les copains,

Voici un cours tutoriel qui vous permettra d’exécuter un commande en « sudo » sans avoir à taper le mot de passe.

Pour ce faire rien de plus simple, sous Ubuntu et sur la plupart des systèmes Linux, il existe un répertoire « /etc/sudoers.d » ou l’on peux créé un fichier permettant d’ajouter des exceptions à la demande du mot de passe lors de l’utilisation de la commande « sudo ».

Pour ce tutorial, je vais prendre comme exemple la commande « apt-get update » qui permet de mettre à jour les dépots et qui doit être lancée avec des droits root et qui dit droit root, dit sudo et dit mot de passe à renseigner. Ce qui peut être contraignant à la longue 😉 Voila ce que cela donne normalement :

no-exception

Pour ne plus avoir à renseigner le mot de passe, il faut créer un fichier dans « /etc/sudoers.d/ » que nous allons appeler « apt-no-password » et y ajouter la ligne « toto ALL = (root) NOPASSWD: /usr/bin/apt-get » ou toto correspond à votre nom d’utilisateur. Pour créer ce fichier, il faut avoir les droit root et par exemple taper la commande :

echo 'gilles ALL = (root) NOPASSWD: /usr/bin/apt-get' | sudo tee -a /etc/sudoers.d/apt-get-no-password

add-file

Et maintenant, il ne nous reste plus qu’à tester que cela fonctionne bien.

sudo apt-get update

no-password

Et voilà ….

PS : Avec une vidéo c’est toujours plus claire 😉