我正在编写一个Flask应用程序,其中我有一个生成JWT的服务,并使用requests.post()将其传递到另一个服务,然后将其解码为' UTF-8'。
在发送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'
为什么即使将类型转换为字符串,我也会收到此错误?
编辑:我能够通过传递标头成功检索令牌。但我仍然想知道导致这个错误的原因。
答案 0 :(得分:-1)
您可以将其发布为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()