3

我正在尝试使用烧瓶测试客户端在我的 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]
4

2 回答 2

10

您确实需要将数据实际编码为 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-urlencodedmultipart/form-data

于 2017-01-14T17:52:59.417 回答
6

我认为使用json参数而不是参数传递数据更简单data

reponse = test_client.put(
    api, 
    json=data,
)

从这里引用:

在测试客户端方法中传递 json 参数将请求数据设置为 JSON 序列化对象,并将内容类型设置为 application/json。

于 2019-10-20T08:33:10.457 回答