在 Flask 中获取没有端口的主机名
Posted
技术标签:
【中文标题】在 Flask 中获取没有端口的主机名【英文标题】:Get Host Name Without Port in Flask 【发布时间】:2014-05-18 08:09:17 【问题描述】:我刚刚设法使用 request.host 和 request.url_root 在 Flask 中获取我的应用服务器主机名,但两个字段都返回主机名及其端口。我想使用仅返回主机名而无需进行字符串替换(如果有)的字段/方法。
【问题讨论】:
【参考方案1】:基于 Juan E 的回答,这是我的
Python3 解决方案:
from urllib.parse import urlparse
o = urlparse(request.base_url)
host = o.hostname
【讨论】:
【参考方案2】:没有单独返回主机名的 Werkzeug(Flask 使用的 WSGI 工具包)方法。 你可以做的是使用 Python 的 urlparse 模块从 Werkzeug 给你的结果中获取主机名:
蟒蛇3
from urllib.parse import urlparse
o = urlparse(request.base_url)
print(o.hostname)
蟒蛇2
from urlparse import urlparse
o = urlparse("http://127.0.0.1:5000/")
print(o.hostname) # will display '127.0.0.1'
【讨论】:
这没有获取主机名,只是显示了如何在获得主机名后从主机名中删除端口号 @duhaime 问题说“两个字段都返回主机名及其端口”,所以我回答了发布的问题。如果您需要不同的东西,您应该寻找适当的问题或自己问。..【参考方案3】:这在 python-flask 应用程序中对我有用。
from flask import Flask, request
print "Base url without port",request.remote_addr
print "Base url with port",request.host_url
【讨论】:
这应该是选择答案 那不是服务器主机,那是用户主机【参考方案4】:实际上,wekzeug.urls.url_parse() 确实提供了一个“主机”属性,虽然它没有显示在对象的 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'
>>>
【讨论】:
【参考方案5】:如果你想在烧瓶模板(jinja2)上使用它:
<!--Without port -->
request.remote_addr
<!-- With port -->
request.hostname
【讨论】:
remote_addr 是客户端的地址,而不是服务器的。【参考方案6】:在 unix 主机上,您可以:
import subprocess
subprocess.check_output('hostname').decode('utf8')
【讨论】:
以上是关于在 Flask 中获取没有端口的主机名的主要内容,如果未能解决你的问题,请参考以下文章
如何解析 Postgresql JDBC url 以获取主机名、端口和 db_name
如何获取部署 Java 适配器的 IBM MobileFirst 服务器的主机名和端口?