我有AWSCredentials对象包括accesskey,sessiontoken等。但是,虽然看起来很简单,但我找不到任何文档如何使用这些凭据调用简单的http请求(例如到Api网关服务)。我尝试过AmazonWebServiceClient,AmazonHttpClient等等。
如何使用aws凭据调用简单的http post或get request?获取响应?
答案 0 :(得分:2)
这个代码块解决了我的问题,多亏了它,我可以发送简单的签名http请求。
BasicSessionCredentials credentials = new BasicSessionCredentials(accessKey, secretKey, sessionToken);
AmazonWebServiceRequest amazonWebServiceRequest = new AmazonWebServiceRequest() {
};
ClientConfiguration clientConfiguration = new ClientConfiguration();
Request request = new DefaultRequest(amazonWebServiceRequest,Constants.API_GATEWAY_SERVICE_NAME);
request.setEndpoint(URI.create(posturl));
request.setHttpMethod(HttpMethodName.POST);
AWS4Signer signer = new AWS4Signer();
signer.setServiceName(Constants.API_GATEWAY_SERVICE_NAME);
signer.setRegionName(Region.getRegion(Regions.US_WEST_2).getName());
signer.sign(request, credentials);
AmazonCustomWebClient webClient = new AmazonCustomWebClient(clientConfiguration, mContext);
webClient.Execute(request, new HttpResponseHandler<AmazonWebServiceResponse<String>>() {
@Override
public AmazonWebServiceResponse<String> handle(HttpResponse response) throws Exception {
return null;
}
@Override
public boolean needsConnectionLeftOpen() {
return false;
}
});
API_GATEWAY_SERVICE_NAME常量对于api网关请求很重要,它是'execute-api',而AmazonCustomWebClient是从AmazonWebServiceClient派生的。
答案 1 :(得分:-1)
您尝试执行的操作称为签署AWS API请求。
此文档包含所有详细信息:http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html
但是,如果您使用的是SDK,则无需手动签署请求。
从文档中引用:
如果您使用的是AWS SDK,AWS命令行界面(CLI)或特定于服务的CLI之一,则无需担心签名请求。您需要做的就是使用一个或多个访问键配置工具。这些工具为您构建并向AWS发送请求,并且作为该过程的一部分,他们使用您提供的访问密钥对请求进行签名。它们负责处理许多连接细节,例如计算签名,处理请求重试和错误处理。