Flask测试具有自定义标头的put请求



我试图使用烧瓶测试客户端在我的烧瓶应用程序中测试PUT请求。在我看来一切都很好,但我一直收到400个不好的请求。

我使用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]

您确实需要将数据编码为JSON:

import json
with app.test_client() as client:
api_response = client.put(api, data=json.dumps(data), headers=headers)

data设置为dictionary会将其视为一个常规的表单请求,因此如果您使用了任何一种内容类型,则每个键值对都将被编码为application/x-www-form-urlencodedmultipart/form-data内容。事实上,您的数据会被完全忽略。

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

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

引用自这里:

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

最新更新