经过几个小时的修修补补和阅读整个互联网,我就是想不出如何签署使用产品广告API的请求。
到目前为止,我已经成功地从提供的WSDL文件生成了一个客户端。为此,我使用了亚马逊的一个教程。你可以在这里找到它:
Tutorial for generating the web service client
到目前为止还没有问题。为了测试客户端,我编写了一小段代码。代码的目的是简单地获取有关产品的一些信息。产品由其ASIN指定。
代码:
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。然后我修改了我自己的代码,使它看起来像这样:
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。
https://stackoverflow.com/questions/3189979
复制相似问题