2010-07-22 7 views
1

je suis en utilisant Google App Engine pour aller chercher l'URL du flux bur peu des urls sont 301 redirect je veux obtenir l'URL finale qui me renvoie le résultatcomment obtenir url redirigé finale

je suis usign l'alimentation universelle lecteur pour l'analyse de l'URL est-il un moyen ou une fonction qui peut me donner l'url finale.

Répondre

3

Il est impossible d'obtenir l'URL « finale » par l'analyse syntaxique, afin de le résoudre, vous devez au moins effectuer une opération HTTP HEAD

+0

+1 pour mentionner l'utilisation de 'HEAD' –

0

Vous pouvez le faire en manipulation réoriente manuellement. Lorsque vous appelez fetch, transmettez le follow_redirects=False. Si le statut HTTP de votre objet de réponse est un code de redirection, soit 301 soit 302, saisissez l'en-tête de réponse Location et réexécutez jusqu'à ce que le statut HTTP soit différent. Ajouter une vérification de santé mentale (peut-être 5 redirections max) pour éviter les boucles de redirection.

3

Si vous utilisez le urlfetch API, vous pouvez simplement accéder à l'attribut final_url du response object que vous obtenez de urlfetch.fetch(), en supposant que défini follow_redirects-True:

>>> from google.appengine.api import urlfetch 
>>> url_that_redirects = 'http://www.example.com/redirect/' 
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=False) 
>>> resp.status_code 
302 # or 301 or whatever 
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=True) 
>>> resp.status_code 
200 
>>> resp.final_url 
'http://www.example.com/final_url/' 

Notez que les paramètres par défaut de l'argument de mot-clé follow_redirects à True , vous n'avez donc pas à le définir explicitement.

Questions connexes