我正试图通过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)
答案 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)