python - 如何从 flask 发送和接收数据?

标签 python flask python-requests

我正在尝试将从 client.py 创建的 python 字典发送到我的网络服务,让网络服务对数据执行某些操作,然后将 bool 值返回到 client.py。这是我目前为服务器和客户端编写的代码:

服务器端(在 webservice.py 中):

from flask import Flask
from flask import request
import json

app = Flask(__name__) 

@app.route('/determine_escalation',methods = ['POST'])
def determine_escalation():
    jsondata = request.form['jsondata']
    data = json.loads(jsondata)

    #stuff happens here that involves data to obtain a result

    result = {'escalate':'True'}
    return json.dumps(result)


if __name__ == '__main__':
    app.run(debug=True)

客户端(在 client.py 中):

import sys
import json
import requests

conv = [{'input': 'hi', 'topic': 'Greeting'}]
s = json.dumps(conv) 
res = requests.post("http://127.0.0.1:5000/determine_escalation",data=s)
print res.text

但是当我打印出 res.text 时,我得到了这个:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>

我做错了什么,我该如何解决? Flask 和 JSON 内容的新手,因此非常感谢您的帮助。

最佳答案

好的 - 这里有几个问题:

首先,您可以使用 requests.get_json() 在服务器端检索您的 JSON 数据:

from flask import Flask
from flask import request
import json

app = Flask(__name__) 

@app.route('/determine_escalation/', methods = ['POST'])
def determine_escalation():
    jsondata = request.get_json()
    data = json.loads(jsondata)

    #stuff happens here that involves data to obtain a result

    result = {'escalate': True}
    return json.dumps(result)


if __name__ == '__main__':
    app.run(debug=True)

此外,当您将数据放在一起时,不要使用“data=s”来发送请求,而是使用“json=s”:

import sys
import json
import requests

conv = [{'input': 'hi', 'topic': 'Greeting'}]
s = json.dumps(conv)
res = requests.post("http://127.0.0.1:5000/determine_escalation/", json=s).json()
print(res['escalate'])

请注意,我在 URL 的末尾添加了尾部斜杠 - 这是一个很好的做法:-)

我还采纳了 MarcelK 的建议更改 - 从 bool 值“True”(服务器端)中删除引号并使用 .json() 来解析客户端的响应 - 这两个都是很好的建议。

我已经测试了这个修订版(和重新修订版)并且工作正常。

关于python - 如何从 flask 发送和接收数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35661526/

相关文章:

python - 套接字编程-如何连接远程地址

python - 如何在一个容器中运行 Flask 和 celery?

javascript - Flask 中的 Ajax POST 请求

Python 请求无法处理 403 错误

python - 用 Python 抓取雅虎财务 Assets 负债表

python - 从分组数据创建一个新列

c# - 用于 SWIG python 接口(interface)的 IronPython

python - 运行 docker 基础镜像时/bin/sh python not find 错误

python - 在没有任何连接的情况下在 Flask 上显示 Swagger UI

Python 请求模块未从 Web 服务器获取最新数据