我正在尝试发送包含数据和 JSON 字段的 post 请求,例如:
my_df = pd.read_csv('test.csv')
pickled = pickle.dumps(my_df)
pickled_b64 = base64.b64encode(pickled)
my_name = "my_csv_name.csv"
r = requests.post('http://localhost:5003/rcvdf', data = pickled_b64, json= {"name": my_name})
请注意,pickled_b64 的类型为“字节”。
但另一方面,我只得到数据,根本没有 JSON:
@api.route('/rcvdf', methods=['POST'])
def test_1():
data_pickeled_b64_string = request.data
json_data = request.json #This is None
甚至可以通过这种方式传递两个变量吗?
--编辑
解决方案
感谢评论,我尝试了不同的方法 - 并通过标头传递变量:
发送方:
my_name = "my_csv.csv"
r = requests.post('http://localhost:5003/rcvdf', data=pickled_b64, headers={"name": my_name})
接收方:
@app.route('/rcvdf', methods=['POST'])
def rcvdf():
data_pickeled_b64_string = request.data
name = request.headers['name']
答案 0 :(得分:2)
func retrieveFromAPI<R: Decodable & CoreDataMappable>(endpoint: Endpoint, object: R.Type) {
API.client.call(endpoint, expecting: [R].self) { (result, objects) in
//...
}
}
只是 requests.post(url, json=payload)
请注意,如果传递数据或文件,将忽略 json 参数。
{{3}}
所以,不,不能同时传递 requests.post(url, data=json.dumps(payload))
和 data
参数。
答案 1 :(得分:1)
另一种方法:
由于 base64 编码具有 ASCI 格式,因此您可以将其转换为简单的字符串对象。
然后你可以通过在你的 json 数据中嵌入你的 pickled_b64 来做到这一点:
import base64, request
pickled_b64 = str(base64.b64encode("hello world".encode()), encoding="utf-8")
json_data = {"Pickled_B64": pickled_b64, "Name": "my_csv_name.csv"}
send_request = requests.post('http://localhost:5003/rcvdf', json=json_data)
print(send_request.json())
在您的后端:
from flask import make_response, jsonify
@api.route('/rcvdf', methods=['POST'])
def test_1():
pickled_b64 = request.json.get('Pickled_B64', None)
name = request.json.get('Name', None)
reserve_dict = {"Status": "Got it", "name": name, "pickled_b64": pickled_b64}
reserve_response = make_response(jsonify(reserve_dict), 200)
return reserve_response