Json JWT正在请求时从str转换为字节。post()
我正在编写一个Flask应用程序,其中有一个服务生成JWT,并在将其解码为“UTF-8”后,使用requests.post()将其传递给另一个服务 在发送JWT时,我可以看到类型为“str”。但是,在另一个服务上执行json.loads()时,我得到一个错误 TypeError:JSON对象必须是str,而不是“bytes” 这是我的密码: 服务1: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'},
@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.dumpsChangingdata=json.loads(request.data)
到data=request.get_json()
可能是一个可能的解决方法。尝试删除token=token.decode('UTF-8')
,这会给我一个“非json可序列化类型错误”。在json.dumpschagingdata=json.load(request.data)
到data=request.get_json()
之前,需要将其解码为“UTF-8”。