GAE self.request.environ和服务器主机
问题描述:
我试图获取运行我的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
答
您可以找到主机名os.environ['HTTP_HOST']
。
这将不包括协议,但它应该很容易从你得到的数值解析:
base = '/'.join(url.split('/')[:3])
或...
import urlparse
url = urlparse.urlparse(url)
base = "%s://%s" % (url.scheme, url.hostname)
谢谢。我希望有一个内置于wsgiref的解决方案,而不是解析请求的URL。这个就足够了 – Kyle 2010-08-20 22:30:20
这对于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
如果您浏览[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