在requests.post()

时间:2017-08-14 07:38:25

标签: json python-3.x flask python-requests jwt

我正在编写一个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'

为什么即使将类型转换为字符串,我也会收到此错误?

编辑:我能够通过传递标头成功检索令牌。但我仍然想知道导致这个错误的原因。

1 个答案:

答案 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()