Json JWT正在请求时从str转换为字节。post()

Json JWT正在请求时从str转换为字节。post(),json,python-3.x,flask,python-requests,jwt,Json,Python 3.x,Flask,Python Requests,Jwt,我正在编写一个Flask应用程序,其中有一个服务生成JWT,并在将其解码为“UTF-8”后,使用requests.post()将其传递给另一个服务 在发送JWT时,我可以看到类型为“str”。但是,在另一个服务上执行json.loads()时,我得到一个错误 TypeError:JSON对象必须是str,而不是“bytes” 这是我的密码: 服务1: @app.route('/') def index(): token = jwt.encode({'message': 'Hello'},

我正在编写一个Flask应用程序,其中有一个服务生成JWT,并在将其解码为“UTF-8”后,使用requests.post()将其传递给另一个服务

在发送JWT时,我可以看到类型为“str”。但是,在另一个服务上执行json.loads()时,我得到一个错误

TypeError:JSON对象必须是str,而不是“bytes”

这是我的密码:

服务1:

@app.route('/')
def index():
   token = jwt.encode({'message': 'Hello'}, app.config['SECRET_KEY'])
   # After this statement I am able to verify the type is str and not bytes
   token = token.decode('UTF-8')
   headers = {'content-type': 'application/json'}
   url = 'someUrl'
   data = {"token": token}
   data = json.dumps(data)
   requests.post(url, data=data, headers=headers)
   return 'Success'
服务2:

@app.route('/', methods=['POST'])
def index():
   data = json.loads(request.data)
   return 'Success'
为什么即使类型已转换为字符串,仍会出现此错误


编辑:通过将令牌传递到标头,我成功地检索到了令牌。但是我仍然想知道是什么导致了这个错误。

您可以将它作为JSON而不是数据发布,并让底层库为您处理它

服务1

@app.route('/')
def index():
   token = jwt.encode({'message': 'Hello'}, app.config['SECRET_KEY']).decode('UTF-8')
   url = 'someUrl'
   data = {"token": token}
   requests.post(url, json=data)
   return 'Success'
服务2

    data = request.get_json()

您可以将其作为JSON而不是数据发布,并让底层库为您处理

服务1

@app.route('/')
def index():
   token = jwt.encode({'message': 'Hello'}, app.config['SECRET_KEY']).decode('UTF-8')
   url = 'someUrl'
   data = {"token": token}
   requests.post(url, json=data)
   return 'Success'
服务2

    data = request.get_json()

尝试删除给我一个“非JSON可序列化类型错误”的
token=token.decode('UTF-8')
。在json.dumpsChanging
data=json.loads(request.data)
data=request.get_json()
可能是一个可能的解决方法。尝试删除
token=token.decode('UTF-8')
,这会给我一个“非json可序列化类型错误”。在json.dumpschaging
data=json.load(request.data)
data=request.get_json()
之前,需要将其解码为“UTF-8”。