如何在python中处理GET请求

时间:2019-11-29 18:53:22

标签: python flask

我在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。

2 个答案:

答案 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)

我强烈建议您阅读thatthat