首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Amazon Product Advertising API使用Java签名的请求

Amazon Product Advertising API使用Java签名的请求
EN

Stack Overflow用户
提问于 2010-07-07 04:29:59
回答 3查看 9K关注 0票数 16

经过几个小时的修修补补和阅读整个互联网,我就是想不出如何签署使用产品广告API的请求。

到目前为止,我已经成功地从提供的WSDL文件生成了一个客户端。为此,我使用了亚马逊的一个教程。你可以在这里找到它:

Tutorial for generating the web service client

到目前为止还没有问题。为了测试客户端,我编写了一小段代码。代码的目的是简单地获取有关产品的一些信息。产品由其ASIN指定。

代码:

代码语言:javascript
复制
package client;

import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemLookupRequest;

public class Client {

  public static void main(String[] args) {
    System.out.println("API Test startet");

    AWSECommerceService service = new AWSECommerceService();
    AWSECommerceServicePortType port = service.getAWSECommerceServicePort();

    ItemLookupRequest itemLookup = new ItemLookupRequest();
    itemLookup.setIdType("ASIN");
    itemLookup.getItemId().add("B000RE216U");

    ItemLookup lookup = new ItemLookup();
    lookup.setAWSAccessKeyId("<mykeyishere>");
    lookup.getRequest().add(itemLookup);

    ItemLookupResponse response = port.itemLookup(lookup);

    String r = response.toString();
    System.out.println("response: " + r);

    System.out.println("API Test stopped");
  }
}

正如您所看到的,没有我签名请求的部分。我已经用自己的方式检查了很多使用的类,但没有发现用于对请求进行签名的方法。

那么,如何签署请求呢?

实际上,我在文档中找到了一些东西:request authentication

但它们不使用自己的API。建议的解决方案或多或少仅供手动使用。因此,我查看了客户端类,以确定是否可以获得请求URL,并自己添加请求签名所需的所有部分。但是没有这样的方法。

我希望有人能指出我做错了什么。

这就是我为解决这个问题所做的。所有的功劳都归功于Jon和亚马逊论坛的人。

在我概述我所做的事情之前,这里有一个帮助我解决问题的帖子的链接:Forum Post on Amazon forums

我下载了帖子中链接的awshandlerresolver.java。然后我修改了我自己的代码,使它看起来像这样:

代码语言:javascript
复制
package client;

import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemLookupRequest;

public class Client {

  public static void main(String[] args) {
    System.out.println("API Test startet");

    AWSECommerceService service = new AWSECommerceService();
    service.setHandlerResolver(new AwsHandlerResolver("<Secret Key>"));  // important
    AWSECommerceServicePortType port = service.getAWSECommerceServicePort();

    ItemLookupRequest itemLookup = new ItemLookupRequest();
    itemLookup.setIdType("ASIN");
    itemLookup.getItemId().add("B000RE216U");

    ItemLookup lookup = new ItemLookup();
    lookup.setAWSAccessKeyId("<Access Key>"); // important
    lookup.getRequest().add(itemLookup);

    ItemLookupResponse response = port.itemLookup(lookup);

    String r = response.toString();
    System.out.println("response: " + r);   
    System.out.println("API Test stopped");
  }
}

末尾的println或多或少是无用的。但它是有效的。我还使用了链接的WSDL Jon来生成一个新的new服务客户端。我只是在我的问题中发布的教程中更改了URL。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3189979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档