获取使用python烧瓶的访客的IP地址
-
04-10-2019 - |
解决方案
查看文档 如何访问请求对象 然后从同一请求对象中获取属性 remote_addr
.
代码示例
from flask import request
from flask import jsonify
@app.route("/get_my_ip", methods=["GET"])
def get_my_ip():
return jsonify({'ip': request.remote_addr}), 200
有关更多信息,请参见 Werkzeug文档.
其他提示
实际上,您会发现的是,仅仅获得以下内容将为您提供服务器的地址:
request.remote_addr
如果您想要客户端IP地址,请使用以下内容:
request.environ['REMOTE_ADDR']
可以使用以下片段检索用户的IP地址:
from flask import request
print(request.remote_addr)
我有 nginx 以及以下 nginx配置:
server {
listen 80;
server_name xxxxxx;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://x.x.x.x:8000;
}
}
@tirtha-r 解决方案对我有用
#!flask/bin/python
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/', methods=['GET'])
def get_tasks():
if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
return jsonify({'ip': request.environ['REMOTE_ADDR']}), 200
else:
return jsonify({'ip': request.environ['HTTP_X_FORWARDED_FOR']}), 200
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0', port=8000)
我的要求和回应:
curl -X GET http://test.api
{
"ip": "Client Ip......"
}
httpbin.org 使用此方法:
return jsonify(origin=request.headers.get('X-Forwarded-For', request.remote_addr))
以下代码始终为客户端提供公共IP(而不是代理背后的私有IP)。
from flask import request
if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
print(request.environ['REMOTE_ADDR'])
else:
print(request.environ['HTTP_X_FORWARDED_FOR']) # if behind a proxy
这应该做这项工作。它提供客户端IP地址(远程主机)。
请注意,此代码在服务器端运行。
from mod_python import apache
req.get_remote_host(apache.REMOTE_NOLOOKUP)
不隶属于 StackOverflow