我在kubernetes中运行了一些微服务,它们需要相互传递一些数据,但是我无法处理服务器端的GET请求。
我发现的文档非常关注如何在python上发出GET请求,而不是如何处理它。
所以,这就是我尝试过的:
from flask import Flask
from flask import request
import requests
app = Flask(__name__)
@app.route('/<trace_id>')
def root():
return trace_id
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True)
我从客户端发出这样的请求:
>>> trace_id = '54b012b2767e7b21321ca649872913c5'
>>> requests.get('http://my-service', params=trace_id)
<Response [404]>
在我的服务器上,我将其丢弃:
/# python3 app.py
* Serving Flask app "app" (lazy loading)
...
10.52.2.29 - - [29/Nov/2019 18:41:23] "GET /?54b012b2767e7b21321ca649872913c5 HTTP/1.1" 404 -
我想知道如何在服务器端处理请求。另外,很高兴得到一些最好的解决方法的建议。
注意:服务器前面有一个k8s服务,它可以 在端口80上请求并转发到8080。
答案 0 :(得分:3)
您需要传递trace_id
作为输入参数
def root(trace_id):
return trace_id
trace_id是url的一部分,而不是查询的一部分:
requests.get('http://my-service/' + trace_id)
答案 1 :(得分:1)
我们必须仔细查看您的代码。
@app.route('/<trace_id>')
括号内的字符串参数是'http://my_service/'之后的路径部分。
此API端点的完整路径将为'http://my_service/value_of_trace_id'。
这部分'value_of_trace_id'将存储为'trace_id'变量并传递给函数体,因此您必须将其作为函数(API端点)arg传递。
@app.route('/<trace_id>')
def api_endpoint(trace_id):
return trace_id
因此,您必须使用:
requests.get('http://my-service/' + trace_id)