我正在使用適用於Android的AWS SDK將對象從S3下載到我的Android平板電腦。在嘗試通過代理路由流量(現在我在本地網絡上使用Charles Proxy作爲測試平臺)來限制S3下載的下載速度時,我使用ClientConfiguration.setProxyHost和setProxyPort,但S3 TransferUtility似乎忽略了設置並直接轉到AWS S3而不是代理。Android AWS S3 TransferUtility靜默地忽略ClientConfiguration中的代理設置
沒有代理集的代碼工作正常。對象成功下載。代理集的代碼行爲完全相同,並且代理不顯示來自平板電腦的任何連接。
我已經向自己證明,該代理的工作原理是通過在Android平板Wifi設置(手動設置代理)中設置代理主機和端口,代理顯示成功通過代理的AWS S3連接。首先,我認爲AmazonS3Client完全忽略了我的ClientConfiguration,但我已經證明,當我將ClientConfiguration.setProtocol從HTTPS設置爲HTTP時,AWS TransferUtility將從http更改爲https作爲AWS端點。
代碼看起來像其他示例代碼,用於設置我可以使用ClientConfiguration和TransferUtility找到的代理。
ClientConfiguration getClientConfiguration() {
return new ClientConfiguration()
.withMaxConnections(2)
.withProxyHost("192.168.1.137")
.withProxyPort(8888)
.withConnectionTimeout(30 * 1000) // Wait 30 seconds to make a connection
.withSocketTimeout(0); // Keep open connections open indefinitely (we have very large downloads)
}
public S3Controller(Context context) {
java.util.logging.Logger.getLogger("com.amazonaws").setLevel(java.util.logging.Level.FINEST);
applicationContext = context.getApplicationContext();
clientConfig = getClientConfiguration();
s3Client = new AmazonS3Client(getCredentials(), clientConfig);
transferUtility = new TransferUtility(s3Client, applicationContext);
pendingTransfers = new PendingTransferQueue();
}
// ...後來
TransferObserver observer = transferUtility.download(BuildConfig.S3_BUCKET, key, file);
正如你可以看到我也試着設置,以便在amazonaws爲:最詳細的日誌記錄級別,以獲得在代理沒有失敗一些知名度額外的日誌顯示。
任何有關AWS SDK爲何忽略我的代理的建議,或者我如何設置日誌記錄以找出有關其失敗位置的更多詳細信息?
在此先感謝。
什麼SDK版本您使用的? –
我使用aws-android-sdk-core和aws-android-sdk-s3 v2.3.8,儘管我試圖將它撞到更新的版本(v2.4.0)而沒有任何改變。我通過編寫一個定製的HttpClient來強制解決方案,這個定製的HttpClient通過代理在execute方法中打開一個連接,但它重複了大部分現有的HttpClient類。我仍然在尋找更優雅的解決方案。 –