2010-08-20 52 views
0

我试图获取运行我的appengine应用程序的服务器的基本URL(主机名)。GAE self.request.environ和服务器主机

即沿东西的

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

线但是它的返回,我不想PATH_INFO。也许我错过了一些东西,但即使这篇文章指出路径信息应该省略。 http://docs.python.org/library/wsgiref.html

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

基本上是沿着什么,我试图找回线。相反,它的返回

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

回答

5

请求对象是Webob请求对象。因此,您可以从self.request.host获取主机名,协议名为self.request.host_url的主机名,等等。

1

您可以找到主机名os.environ['HTTP_HOST']

这将不包括协议,但它应该很容易从你得到的数值解析:

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

或...

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

谢谢。我希望有一个内置于wsgiref的解决方案,而不是解析请求的URL。这个就足够了 – Kyle 2010-08-20 22:30:20

+0

这对于wsgi以外的情况非常有用。例如[BeautifulSoup](http://beautiful-soup-4.readthedocs.org/)使用[python-requests](http://requests.readthedocs.org/)和相关的url。不过,我会建议你使用url.netloc而不是url.hostname **。 Netloc包含的端口号分别与http和https的默认值80和443不同。 – 2012-11-11 21:12:57

+0

如果您浏览[docs for urlparse](http://docs.python.org/2/library/urlparse.html),您会发现“返回值实际上是元组子类的一个实例”。这使您可以访问6个关键属性。 (这些包括netloc,但不包括主机名,作为我上面的索赔的进一步证据。)这允许你使用这个oneliner'base ='://'.join(urlparse(url)[0:2])来获得你的基础'如果你从'urlparse import urlparse'。如果你正在使用[python-requests](http://requests.readthedocs.org/)得到这样的URL:'response.request.url' – 2012-11-11 21:42:49