2010-08-20 7 views
0

J'essaie d'obtenir l'URL de base (nom d'hôte) du serveur sur lequel mon application appengine est en cours d'exécution.GAE self.request.environ et hôte du serveur

Ie quelque chose le long des lignes de

wsgiref.util.application_uri(self.request.environ) 

Cependant, il est de retour PATH_INFO que je ne veux pas. Peut-être que je manque quelque chose, mais même cet article stipule que les informations sur le chemin doivent être omises. http://docs.python.org/library/wsgiref.html

http://9.latest.my-app.appspot.com

est essentiellement le long des lignes de ce que je suis en train de récupérer. Au contraire, il est de retour

http://9.latest.my-app.appspot.com/my/requested/path

Répondre

5

L'objet de la demande est Webob demande l'objet. En tant que tel, vous pouvez obtenir le nom d'hôte de self.request.host, le nom d'hôte avec le protocole de self.request.host_url, et ainsi de suite.

1

Vous pouvez trouver le nom d'hôte dans os.environ['HTTP_HOST'].

Cela ne comprendra pas le protocole, mais il devrait être facile à analyser de la valeur que vous avez:

base = '/'.join(url.split('/')[:3]) 

ou ...

import urlparse 
url = urlparse.urlparse(url) 
base = "%s://%s" % (url.scheme, url.hostname) 
+0

Merci. J'espérais une solution intégrée à wsgiref plutôt que d'analyser l'URL demandée. Cela suffira cependant – Kyle

+0

Ceci est très utile pour les cas autres que wsgi. Par exemple en utilisant [python-requests] (http://requests.readthedocs.org/) avec [BeautifulSoup] (http://beautiful-soup-4.readthedocs.org/) et en suivant les URLs relatives. Je vais cependant vous suggérer d'utiliser ** url.netloc au lieu de url.hostname **. Netloc inclut le numéro de port lorsqu'il diffère des valeurs par défaut de 80 et 443 respectivement pour http et https. –

+0

Si vous parcourez [docs pour urlparse] (http://docs.python.org/2/library/urlparse.html) vous constaterez que "la valeur de retour est en fait une instance d'une sous-classe de tuple". Cela vous donne accès à 6 attributs clés. (Ceci inclut netloc, mais pas hostname, comme preuve supplémentaire de ma réclamation ci-dessus.) Cela vous permet d'obtenir votre base avec cet oneliner 'base = ': //'.join (urlparse (url) [0: 2])' si vous "d'urlparse importer urlparse". Si vous utilisez [python-requests] (http://requests.readthedocs.org/) obtenez l'URL comme suit: 'response.request.url' –

Questions connexes