在处理使用IBM Watson机器学习识别手写数字笔记本的第6.1节时,调用Watson机器学习REST API来获取已发布模型列表时使用:
GET /v3/wml_instances/{instance_id}/published_models
端点时,出现了授权(401)错误,并返回以下响应文本:
{"trace":"-1xmid60eblabs","errors":[{"code":"invalid_token_format","message":"无效的令牌格式。应使用Bearer令牌格式。","target":{"type":"header","name":"Authorization"}}]}
笔记本中之前的REST API调用,使用从/v3/identity/token
端点返回的授权令牌获取实例详情时运行正常。
看起来笔记本中可能存在错误。API授权方案是否发生了变化,导致笔记本无法正常工作?
回答:
REST API中的这个端点似乎期望认证形式为Authorization: <type> <credentials>
,按照W3C在HTTP 1.0中的规定
我更新了笔记本代码,在头部的Authorization字段中添加了类型:
header = {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + mltoken}
笔记本中用于创建在线部署和评分新数据的其余Watson机器学习API调用使用相同的头部,并且都正确执行。