Proxy Amazon S3客户端通过代理连接-putObject获取NullPointerException

Proxy Amazon S3客户端通过代理连接-putObject获取NullPointerException,proxy,amazon-s3,amazon-web-services,Proxy,Amazon S3,Amazon Web Services,我有一段简单的代码,它试图通过代理将一个文件上传到AmazonS3。代码如下: BasicAWSCredentials basicCred = new BasicAWSCredentials("my_access_key", "my_secret_key"); ClientConfiguration clientCfg = new ClientConfiguration(); clientCfg.setProtocol(Protocol.HTTP); //set

我有一段简单的代码,它试图通过代理将一个文件上传到AmazonS3。代码如下:

    BasicAWSCredentials basicCred = new BasicAWSCredentials("my_access_key", "my_secret_key");
    ClientConfiguration clientCfg = new ClientConfiguration();
    clientCfg.setProtocol(Protocol.HTTP);

    //setup proxy connection:
    clientCfg.setProxyHost("192.168.2.12");
    clientCfg.setProxyPort(80);




    AmazonS3 s3 = new AmazonS3Client(basicCred, clientCfg);


    String bucketName = "mybucket";
    String key = "/test/Capture.JPG";
    File file = new File("d:/Test_Data/Capture.JPG");

    System.out.println("Uploading a new object to S3 from a file");
    s3.putObject(new PutObjectRequest(bucketName, key, file));
但是,这是我在运行程序时遇到的错误:

Exception in thread "main" java.lang.NullPointerException
    at com.amazonaws.util.BinaryUtils.fromHex(BinaryUtils.java:69)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1066)
    at javaapplication8.JavaApplication8.main(JavaApplication8.java:48)
Java Result: 1
我正在使用来自amazon的最新aws 1.3.8 sdk。代理是在我旁边的另一台PC上设置的,它只是一个简单的Javascript代理(http://www.catonmat.net/http-proxy-in-nodejs/)


我不明白为什么。有人能帮我吗?

我也遇到了这个问题。我在调试器中仔细检查了所有内容,发现问题的原因是Amazon S3客户端代码需要一个名为
“ETag”
,但响应包含
“ETag”
,带有小写的
“t”

头被放入一个
映射中
,因此当AmazonS3客户端代码调用
get(“ETag”)
时,它会返回
null
,然后将其输入
hexData()
方法并启动

这似乎发生在许多使用非AmazonS3服务或通过web代理访问AmazonS3服务的人身上


除了抓取Amazon客户端源代码、将
Headers.ETAG
值更改为
“ETAG”
并自己构建
JAR
之外,我不知道还有什么解决方案。

将协议更改为HTTPS


$clientCfg.setProtocol(Protocol.HTTPS)

这里是另一种方法

ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTPS);
config.setProxyHost("YOUR_PROXY_IP");
config.setProxyPort(YOUR_PROXY_PORT);

BasicAWSCredentials creds = new BasicAWSCredentials("YOUR_KEY", "YOUR_SECRET"); 
s3Client = AmazonS3ClientBuilder.standard()
                .withClientConfiguration(config)
                .withRegion(Regions.US_EAST_2)
                .withCredentials(new AWSStaticCredentialsProvider(creds))                   
                .build();

在进一步调查之后,我发现函数中的hexData为null:第69行的BinaryUtils.java中的public static byte[]fromHex(字符串hexData)。更新:我在AWS SDK 1.6.7中也遇到了同样的问题,在更新到1.9.35I之后,它似乎可以正常工作。我确实提供了一个答案,但不是一个简单的答案。它需要重建S3客户机JAR。我希望有一个更好的答案。请注意,这个问题可以追溯到2012年,当时使用HTTPS连接并不像现在这样被广泛使用。它对我很有效。我在我的组织中开发了一个示例应用程序,在那里我遇到了这个问题。配置代理成功了!