使用请求将 JSON 发送到 Flask
Send JSON to Flask using requests
我正在尝试使用请求库将一些 JSON 数据发送到 Flask 应用程序。我希望从服务器返回 application/json
。当我使用 Postman 时这很好用,但是当我使用请求时我得到 application/html
返回。
import requests
server_ip = 'server_ip:port/events'
headers = {'Content-Type': 'application/json'}
event_data = {'data_1': 75, 'data_2': -1, 'data_3': 47, 'data_4': 'SBY'}
server_return = requests.post(server_ip, headers=headers, data=event_data)
print server_return.headers
{'date': 'Fri, 05 Jun 2015 17:57:43 GMT', 'content-length': '192', 'content-type': 'text/html', 'server': 'Werkzeug/0.10.4 Python/2.7.3'}
为什么 Flask 没有看到 JSON 数据并正确响应?
您目前没有发送 JSON 数据。您需要设置 json
参数,而不是 data
。这种情况下不需要自己设置content-type
。
r = requests.post(url, json=event_data)
您看到的 text/html
header 是 响应的 内容类型。 Flask 似乎正在向您发送一些 HTML 返回给您,这似乎很正常。如果您希望返回 application/json
,这可能是因为您未正确发送 JSON 数据而返回的错误页面。
您可以使用 request.json
在 Flask 中读取 json 数据。
from flask import request
@app.route('/events', methods=['POST'])
def events():
event_data = request.json
如果您使用 data
参数而不是 json
参数,Requests 将不知道将数据编码为 application/json
。您可以使用 json.dumps
来做到这一点。
import json
server_return = requests.post(
server_ip,
headers=headers,
data=json.dumps(event_data)
)
我正在尝试使用请求库将一些 JSON 数据发送到 Flask 应用程序。我希望从服务器返回 application/json
。当我使用 Postman 时这很好用,但是当我使用请求时我得到 application/html
返回。
import requests
server_ip = 'server_ip:port/events'
headers = {'Content-Type': 'application/json'}
event_data = {'data_1': 75, 'data_2': -1, 'data_3': 47, 'data_4': 'SBY'}
server_return = requests.post(server_ip, headers=headers, data=event_data)
print server_return.headers
{'date': 'Fri, 05 Jun 2015 17:57:43 GMT', 'content-length': '192', 'content-type': 'text/html', 'server': 'Werkzeug/0.10.4 Python/2.7.3'}
为什么 Flask 没有看到 JSON 数据并正确响应?
您目前没有发送 JSON 数据。您需要设置 json
参数,而不是 data
。这种情况下不需要自己设置content-type
。
r = requests.post(url, json=event_data)
您看到的 text/html
header 是 响应的 内容类型。 Flask 似乎正在向您发送一些 HTML 返回给您,这似乎很正常。如果您希望返回 application/json
,这可能是因为您未正确发送 JSON 数据而返回的错误页面。
您可以使用 request.json
在 Flask 中读取 json 数据。
from flask import request
@app.route('/events', methods=['POST'])
def events():
event_data = request.json
如果您使用 data
参数而不是 json
参数,Requests 将不知道将数据编码为 application/json
。您可以使用 json.dumps
来做到这一点。
import json
server_return = requests.post(
server_ip,
headers=headers,
data=json.dumps(event_data)
)