Python 使用自定义头测试put请求

Python 使用自定义头测试put请求,python,python-2.7,flask,flask-restful,flask-testing,Python,Python 2.7,Flask,Flask Restful,Flask Testing,我正在尝试使用flasks测试客户端在我的Flask应用程序中测试PUT请求。 在我看来一切都很好,但我一直收到400个不好的请求 我用邮递员试过同样的请求,我得到了回复 这是密码 from flask import Flask app = Flask(__name__) data = {"filename": "/Users/resources/rovi_source_mock.csv"} headers = {'content-type': 'application/json'}

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

我用邮递员试过同样的请求,我得到了回复

这是密码

 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
设置为字典将其视为常规表单请求,因此,如果您使用了任一内容类型,则每个键值对都将被编码到
application/x-www-form-urlencoded
multipart/form data
内容中。实际上,您的数据被完全忽略。

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

reponse = test_client.put(
    api, 
    json=data,
)
引述自:

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