首页 > 解决方案 > 如何使用烧瓶和泡菜发送python类对象

问题描述

我有以下代码

客户端.py

import requests
import pickle

class Test():
    def __init__(self, val):
        self.val = val

testList = []
for i in range(0,10):
    testList.append(Test(i))



data = {"foo": 1000, "bar": "value", "list": testList}
endpoint = "%s/%s" % (address, "testendpoint")
r = requests.post(endpoint, data={"req": pickle.dumps(data) })

服务器.py

import flask
import pickle
from flask import request

app = flask.Flask(__name__)
app.config["DEBUG"] = False

class Test():
    def __init__(self, val):
        self.val = val

@app.route('/testendpoint', methods=['POST'])
def testendpoint():
    data = pickle.loads(request.form['req'])
    print(data)

    response = {
        "response": "Success"
    }

    return json.dumps(response)

app.run(host="0.0.0.0", port=24979)

当我在运行 server.py 的情况下运行 client.py 时,出现以下错误:

[2020-07-17 14:06:05,054] ERROR in app: Exception on /testendpoint [POST]
Traceback (most recent call last):
  File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib64/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "server.py", line 11, in testendpoint
    data = pickle.loads(request.form['req'])
TypeError: a bytes-like object is required, not 'str'

我假设我的 bytes 对象在通过 http 请求发送时被转换为字符串。如何通过请求在客户端发送我的数据,然后在服务器端对其进行解码?

标签: pythonflaskpickle

解决方案


它应该是转储,但不是加载

像这样编辑

data = pickle.dumps(request.form['req'])

推荐阅读