亚马逊产品广告 API - 使用 Java/SOAP 批量查找商品时出现 503 错误

Posted

技术标签:

【中文标题】亚马逊产品广告 API - 使用 Java/SOAP 批量查找商品时出现 503 错误【英文标题】:Amazon Product Advertising API - 503 error on batched itemLookup using Java/SOAP 【发布时间】:2016-05-11 04:47:36 【问题描述】:

我在批量查找时遇到问题

com.sun.xml.internal.ws.client.ClientTransportException:

   com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 503: Service Unavailable

com.sun.xml.internal.ws.client.ClientTransportException: 服务器发送 HTTP 状态码 503: Service Unavailable 在 com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:296) 在 com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:245) 在 com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:203) 在 com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:122) 在 com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:95) 在 com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:626) 在 com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585) 在 com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570) 在 com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467) 在 com.sun.xml.internal.ws.client.Stub.process(Stub.java:308) 在 com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:146) 在 com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98) 在 com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) 在 com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129) 在 $Proxy29.itemLookup(Unknown Source)

此 itemLookup 是根据以下请求进行的:

    List<String> resGroup = new ArrayList<String>();
    resGroup.add("Offers");
    resGroup.add("Images");
    resGroup.add("ItemAttributes");
    resGroup.add("ItemIds");

    ItemLookupRequest request = new ItemLookupRequest();
    request.getItemId().addAll(asins);  //asins is an ArrayList<String> of 10 asins
    request.setMerchantId(merchant);
    request.setCondition(condition);
    request.getResponseGroup().addAll(resGroup);

    ItemLookup itemLookup = new ItemLookup();

    itemLookup.setAWSAccessKeyId(AWS_ACCESS_KEY);
    itemLookup.setAssociateTag(ASSOC_TAGS.get("en-GB"));
    itemLookup.getRequest().add(request);

    response = port.itemLookup(itemLookup);   **<-- This line throws the Exception**

此代码已经工作了 3 年,每 24 小时以 10 个批次查找大约 26,000 个项目,没有问题,但在接下来的日期,当天的每个查找都返回 503。

05.04.2015, 06.04.2015

26.04.2015

05.08.2015

25.12.2015, 26.12.2015

25.01.2016 至 02.02.2016(含)

亚马逊产品广告 API 文档中的唯一建议是 503 是由限制引起的,建议减少每秒发送的请求数。节流不应该是每次查找的问题。如果是由于限制,查找首先会成功,并且仅在达到每小时配额后才返回 503。情况并非如此,在给定日期,成功查找为零,服务在所有其他时间恢复正常。

【问题讨论】:

【参考方案1】:

我也遇到503错误,但是当我重复请求时,可能会成功。试试这个:

int retries = 0;
while (retries < 3)

    Thread.sleep(1500 * retries);

    try
        response = port.itemLookup(itemLookup);
        break;
    
    catch(Exception ex) 
    retries++;

希望这会有所帮助。

【讨论】:

以上是关于亚马逊产品广告 API - 使用 Java/SOAP 批量查找商品时出现 503 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用亚马逊的产品广告 API 获取运输信息

使用亚马逊产品广告 API - Python 搜索书籍

亚马逊产品广告 api 获取带有优惠的产品

对亚马逊产品广告 API 的 Java REST 请求失败

没有亚马逊产品广告 API 的亚马逊 ASIN 到 ISBN

如何为 iOS 实现亚马逊的产品广告 API?