如何将一行文本发布到烧瓶REST API?

时间:2018-02-12 09:25:27

标签: python rest curl flask

我正试图通过curl via - Hi, What's up?将整个文本行 - 例如 - curl -X POST "http://localhost:5000/predict/Hi, whats up"推送到Flask REST API。

我遇到的问题是传递的字符串是否带有空格(特殊字符),即curl -X POST "http://localhost:5000/data/Hiwhatsup"工作正常,但较早的字符串会抛出错误的请求。谁能解释为什么会这样?或者如何规避它?

我正在使用的代码如下:

@app.route("/data/<string:query>", methods=["POST"])
def data(query):
    incoming = query
    print(incoming)

2 个答案:

答案 0 :(得分:2)

问题是'Hi, whats up'不是在URL中使用的有效字符串,您应该在使用之前urlencode转义符号并获取'Hi%2C%20whats%20up'。从现在开始,您可以提出请求并处理它

P.S。您的观点为/data/<string:query>,但应该是/predict/<string:query>

答案 1 :(得分:1)

可以通过使用--data-urlencode对您的查询进行网址编码来强制执行此操作,并结合-G强制将此编码数据作为查询参数附加,并明确指定POST方法:

curl -X POST 'http://localhost:5000/data' --data-urlencode 'Hi, whats up' -G

但你可能并不想这样做。您可能只想定期POST到您的受控端点并使用以下内容:

curl 'http://localhost:5000/data' -d 'query=Hi, whats up'

在这种情况下,您的代码必须稍微修改为use request.form

@app.route("/data", methods=["POST"])
def data():
    incoming = request.form.get('query')
    print(incoming)