在 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 中获取没有端口的主机名的主要内容,如果未能解决你的问题,请参考以下文章

flink+Kafka:获取主机名端口

如何解析 Postgresql JDBC url 以获取主机名、端口和 db_name

如何获取部署 Java 适配器的 IBM MobileFirst 服务器的主机名和端口?

获取本地主机名和 IP 地址的 C++ Windows 函数调用

termux不显示主机名

我可以使用/ etc / hosts映射主机名*和*端口吗? [关闭]