我试图使用烧瓶测试客户端在我的Flask应用中测试PUT请求。 一切看起来都不错,但我一直得到400 BAD请求。
我使用POSTMAN尝试了相同的请求,然后我得到了回复。
这是代码
from flask import Flask
app = Flask(__name__)
data = {"filename": "/Users/resources/rovi_source_mock.csv"}
headers = {'content-type': 'application/json'}
api = "http://localhost:5000/ingest"
with app.test_client() as client:
api_response = client.put(api, data=data, headers=headers)
print(api_response)
输出
Response streamed [400 BAD REQUEST]
答案 0 :(得分:6)
您确实需要将数据实际编码为JSON:
import json
with app.test_client() as client:
api_response = client.put(api, data=json.dumps(data), headers=headers)
将data
设置为字典会将其视为常规表单请求,因此如果您使用了任一内容类型,则每个键值对都会被编码为application/x-www-form-urlencoded
或multipart/form-data
内容。实际上,您的数据完全被忽略了。
答案 1 :(得分:1)
我认为仅使用json
参数而不是data
参数传递数据即可。
reponse = test_client.put(
api,
json=data,
)
引用here:
在测试客户端方法中传递json参数可设置请求 数据到JSON序列化的对象,并将内容类型设置为 application / json。