Java 连接到 Amazon S3 时出现 HttpHostConnection 拒绝错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19791466/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Getting HttpHostConnection refused error while connecting to Amazon S3
提问by user2956567
I am using java code to connect to amazon s3. I am getting HttpHostConnection refused error every time I try to connect to S3. On S3 I have only one bucket with all permissions to me as a owner. Whenever I try to list files in bucket or try to upload file on S3 I am getting error.
我正在使用 java 代码连接到亚马逊 s3。每次尝试连接到 S3 时,我都会收到 HttpHostConnection 拒绝错误。在 S3 上,我只有一个存储桶,我作为所有者拥有所有权限。每当我尝试在存储桶中列出文件或尝试在 S3 上上传文件时,我都会收到错误消息。
Code is as follows:
代码如下:
TransferManager tx = new TransferManager(credentials);
Upload upload = tx.upload("bucket.name", doc.getFileName(), new File("C:\testing2.pdf"));
while (upload.isDone() == false) {
System.out.println(upload.getProgress().getPercentTransferred() + "%");
}
INFO [s3-transfer-manager-worker-1] (AmazonHttpClient.java434) - Unable to execute HTTP request: Connection to https://bucket.name.s3.amazonaws.com refused
org.apache.http.conn.HttpHostConnectException: Connection to https://bucket.name.s3.amazonaws.com refused
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:641)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:383)
at com.amazonaws.http.AmazonHttpClient.execute0(AmazonHttpClient.java:266)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:236)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3104)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1233)
at com.amazonaws.services.s3.transfer.internal.UploadCallable.uploadInOneChunk(UploadCallable.java:108)
at com.amazonaws.services.s3.transfer.internal.UploadCallable.call(UploadCallable.java:100)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.upload(UploadMonitor.java:192)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.call(UploadMonitor.java:150)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.call(UploadMonitor.java:50)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
at java.lang.Thread.run(Thread.java:736)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:383)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:245)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:232)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
at java.net.Socket.connect(Socket.java:539)
at com.ibm.jsse2.tc.connect(tc.java:397)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:549)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
... 21 more
回答by ippomakunochi
You may need to check your credentials if you have the correct ACCESS_KEY and SECRET_KEY to connect to AWS S3. You can get it via the Security Credentials in the IAM Management Console.
如果您有正确的 ACCESS_KEY 和 SECRET_KEY 连接到 AWS S3,您可能需要检查您的凭证。您可以通过 IAM 管理控制台中的安全凭证获取它。
回答by user2956567
After 2months struggle I found solution. Here we need to check proxy setttings from our network. I simply created ClientConfig and set proxy properties to this object. I used putObjectRequest method to upload object. Here is a code
经过2个月的斗争,我找到了解决方案。在这里,我们需要检查我们网络中的代理设置。我只是创建了 ClientConfig 并为这个对象设置了代理属性。我使用 putObjectRequest 方法上传对象。这是一个代码
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTPS);
clientConfig.setProxyHost(ip_address);
clientConfig.setProxyPort(port number);
clientConfig.setProxyUsername(user id on network);
clientConfig.setProxyPassword(password on network);
AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials("access key", "secret key"),
clientConfig);
file = new File(fileName);
PutObjectRequest putObject = new PutObjectRequest(bucketName, fileName, file);
ObjectMetadata metaData = new ObjectMetadata();
metaData.setContentType("application/pdf"); //binary data
putObject.setMetadata(metaData);
s3.putObject(putObject);
回答by David Beveridge
To augment the above answer, I've encountered this also due to routing/DNS issues (usually showing as a nested UnknownHostException)
为了补充上面的答案,我也因为路由/DNS 问题(通常显示为嵌套的 UnknownHostException)而遇到了这个问题
- do an nslookup of the s3 URI (e.g.,
nslookup s3.amazonaws.com
) - if you're on a VPN, make sure it's actually working (since many can show "active" while being hung up on the remote end, especially on VMs). an incorrect/failed nslookup should show this as well
- 对 s3 URI 进行 nslookup(例如,
nslookup s3.amazonaws.com
) - 如果您使用的是 VPN,请确保它确实在工作(因为许多在远程端挂断时会显示“活动”,尤其是在 VM 上)。不正确/失败的 nslookup 也应该显示这一点
回答by Georgiana
In my case, it was a proxy problem. On the TS3Connection component, in Advanced settings i have checked config client with the client parameters: Proxy Host,Proxy Port and it worked
就我而言,这是一个代理问题。在 TS3Connection 组件上,在高级设置中,我使用客户端参数检查了配置客户端:代理主机、代理端口并且它工作正常
回答by Gene
When you setup your AmazonS3
objects, you pass in a ClientConfiguration
object.
当你设置你的AmazonS3
对象时,你传入一个ClientConfiguration
对象。
For example:
例如:
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.withProtocol(Protocol.HTTPS);
clientConfig.withProxyHost(ip_address);
clientConfig.withProxyPort(port number);
clientConfig.withProxyUsername(user id on network);
clientConfig.withProxyPassword(password on network);
AmazonS3 s3Client= AmazonS3ClientBuilder.standard().withClientConfiguration(clientConfig)...;
AmazonS3 s3Client= AmazonS3ClientBuilder.standard().withClientConfiguration(clientConfig)...;
You have the .withProxyHost() value wrong.
您的 .withProxyHost() 值错误。