AWS签名请求在使用java.net.URL的Google应用程序引擎上不起作用

AWS签名请求在使用java.net.URL的Google应用程序引擎上不起作用,java,google-app-engine,amazon-web-services,Java,Google App Engine,Amazon Web Services,全部, 我正在使用Play(V1.2.4)框架开发一个简单的Java web应用程序。应用程序使用Amazon的产品广告API执行签名的ItemLookup请求。我正在将该应用程序部署到谷歌应用程序引擎(GAE),这就是我的问题所在 详细信息: 在本地/测试模式下,AWS签名请求使用apache.commons.httpclient和更简单的java.net.URL可以完美地工作。在部署到GAE并发现HTTPClient连接不受SocketConnection使用的支持后,我修改了AWS调用以使

全部,

我正在使用Play(V1.2.4)框架开发一个简单的Java web应用程序。应用程序使用Amazon的产品广告API执行签名的ItemLookup请求。我正在将该应用程序部署到谷歌应用程序引擎(GAE),这就是我的问题所在

详细信息: 在本地/测试模式下,AWS签名请求使用apache.commons.httpclient和更简单的java.net.URL可以完美地工作。在部署到GAE并发现HTTPClient连接不受SocketConnection使用的支持后,我修改了AWS调用以使用java.net.URL。AWS ItemLookup请求不仅继续在本地模式下工作,而且我在Google App Engine(GAE)中不再收到任何异常

问题: 但是,我遇到的问题是,我所有的AWS ItemLookup请求返回时都会显示一条消息,表明签名与AWS预期的签名不匹配。请参阅此问题末尾的实际信息

因此,我很不确定发生了什么。我正在记录从本地模式和GAE发出的请求,签名URL请求的格式似乎没有任何问题。我已经检查过了,并且检查了两次/三次;我的请求是用正确的AWS密钥发出的。这些调用在本地模式下使用相同的键,因此它们是否也应该通过GAE工作?例如,GAE上的示例请求(去掉AWS密钥/标签):


这与游戏框架并不特别相关。我已经取下了标签。如果您认为哈希方法在本地和GAE上的工作方式不同,请创建一个小页面/servlet/为给定静态输入创建哈希的任何内容,然后比较本地结果和GAE结果,并报告GAE上的错误。感谢您的反馈。我正在考虑搬到亚马逊EC2。这是一个更加灵活的开发环境,您不必担心GAE的限制。您同时找到了解决方案吗?我也面临着同样的问题。嗨,我从GAE搬了出来,专门在AWS内部运行。很抱歉
    SIGNED REQUEST=http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=<removed>&AssociateTag=<removed>&ItemId=B0051VVOB2&Operation=ItemLookup&ResponseGroup=Large&Service=AWSECommerceService&Timestamp=2012-03-04T00%3A52%3A23Z&Version=2011-08-01&Signature=<removed>
    <ItemLookupErrorResponse xmlns="http://ecs.amazonaws.com/doc/2011-08-01/">
    <Error>
    <Code>SignatureDoesNotMatch</Code>
    <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
    </Error>
    <RequestID>aa42318e-9c2c-4f04-9905-670866223bc5</RequestID>
    </ItemLookupErrorResponse>