在Flask中获取不带端口的Get请求主机名

11

我刚刚成功地在Flask中使用request.hostrequest.url_root获取我的应用程序服务器主机名,但是这两个字段都返回带有其端口的请求主机名。

我想要使用一个仅返回请求主机名而不必进行字符串替换的字段/方法,如果有的话。

5个回答

14

在Juan E的回答基础上,这是我对Python3的解决方案:

Solution for Python3:

from urllib.parse import urlparse
o = urlparse(request.base_url)
host = o.hostname

14

FlaskдҢүз”Ёзљ„WSGIе·Өе…·еЊ…WerkzeugжІҰжњ‰иү”е›һдё»жњғеђҚзљ„ж–№жі•пәЊдҢ†ж‚ЁеЏҮд»ӨдҢүз”ЁPythonзљ„urlparseжЁҰеқ—д»ҺWerkzeugзљ„з»“жһњдё­иҺ·еЏ–дё»жњғеђҚпәљ

python 3

from urllib.parse import urlparse

o = urlparse(request.base_url)
print(o.hostname)

Python 2

from urlparse import urlparse
    
o = urlparse("http://127.0.0.1:5000/")
print(o.hostname)  # will display '127.0.0.1'

这并不获取主机名,只是展示了一旦你有了主机名如何从主机名中删除端口号。 - duhaime
@duhaime 这个问题说“两个字段都返回主机名和端口号”,所以我回答了这个问题。如果你需要其他的东西,你应该寻找适当的问题或者自己提问。 - Juan E.

10

这在我的Python-Flask应用程序中可以正常工作。

from flask import Flask, request
print "Base url without port",request.remote_addr
print "Base url with port",request.host_url

11
不是服务器主机,而是用户主机。 - Joao Carlos

0

如果你想在 Flask 模板 (jinja2) 中使用它:

<!--Without port -->
{{ request.remote_addr }}

<!-- With port -->
{{ request.hostname }}

2
remote_addr 是客户端的地址,而不是服务器的。 - Luka Zakrajšek

0
实际上,wekzeug.urls.url_parse() 提供了一个 "host" 属性,尽管它不会在对象的 str() 中显示:
>>> from werkzeug.urls import url_parse
>>> url_parse('https://auth.dev.xevo-dev.com:443/path/to/me?query1=x&query2')
URL(scheme='https', netloc='auth.dev.xevo-dev.com:443', path='/path/to/me', query='query1=x&query2', fragment='')
>>> url_parse('https://auth.dev.xevo-dev.com:443/path/to/me?query1=x&query2').host
'auth.dev.xevo-dev.com'
>>> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接