亚马逊接口NextToken分页调用时AuthFailure问题的解决

Posted Defonds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了亚马逊接口NextToken分页调用时AuthFailure问题的解决相关的知识,希望对你有一定的参考价值。

使用 aws 第四代签名算法 API(非 SDK 方式)访问亚马逊云接口,比如 DescribeInstanceTypes 首次请求会返回100条数据和 NextToken 用于分页请求其余数据,但用 NextToken 再次请求时报错:

<?xml version="1.0" encoding="utf-8"?>

<Response> 
  <Errors> 
    <Error> 
      <Code>AuthFailure</Code>  
      <Message>AWS was not able to validate the provided access credentials</Message> 
    </Error>
  </Errors>  
  <RequestID>bc04724d-d051-4381-80f0-f442b9c5228e</RequestID>
</Response>

这是由于 NextToken 含有 = 号,比如:

AAIAATUFTwRD6DG2RbXdzNAO1krlm9wTzNX2iAYK8p0Fgf1qTdcn4GcbFV0MDclb6dpurh0YYmm0p4rrFw_bUWhfefWnHA4dvsqSNxxENqnlHOBgGopD5LN32ci3mAOh1SDqlFCSCrE0fAOIo8KRsqgHA7GOLBXCdg==

这种将导致 url 传的参数和签名参数不一致而导致 aws 签名失败,返回 AuthFailure。
解决办法是 GET 请求 url 拼接参数的时候,进行 URL 转义:

url += entry.getKey() + "=" + URLEncoder.encode(entry.getValue(),"UTF-8") + "&";

这就可以了,不要再对 AmazonAWSV4Auth、请求头的参数转义,继续请求就可以正常返回了。

以上是关于亚马逊接口NextToken分页调用时AuthFailure问题的解决的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊接口NextToken分页调用时AuthFailure问题的解决

亚马逊接口NextToken分页调用时AuthFailure问题的解决

如何使用“nextToken”参数测试分页?

在JPA进行分页查询时,Query接口中的啥方法用于设定需要获取的总行数

接口调用外部系统返回数据,本系统做数据分页封装

亚马逊的产品广告 API 返回错误的分页/结果值