我注意到在Android上出现了一个非常奇怪的事件。我有一个存储桶,其中包含许多我需要在iPhone和Android应用上显示的图像。在iPhone上,一切正常,因为我使用SDWebImage
来下载,缓存和显示图像。在Android应用中,我正在使用Shutterbug
。
当我使用以下链接在Android上下载图像时,一切正常:
https://s3.amazonaws.com/ {{bucket name}} / image.png
但是,当我使用以下链接时,我会收到错误:
https:// {{bucket name}}。s3.amazonaws.com / images.png
我得到的错误如下:
java.net.UnknownHostException: https://{{bucket name}}.s3.amazonaws.com/image.png
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:279)
at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
at com.applidium.shutterbug.downloader.ShutterbugDownloader$1.doInBackground(ShutterbugDownloader.java:65)
at com.applidium.shutterbug.downloader.ShutterbugDownloader$1.doInBackground(ShutterbugDownloader.java:52)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
在更改网址时,我有什么理由得到这个吗?理想情况下,我更喜欢第二种,因为它可以读取Google的robot.txt。
答案 0 :(得分:1)
我看到了这个页面:
http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
原来我的桶里有一个下划线(_)。这违反了标准。在iOS中,即使使用非标准字符,这些URL也可以正常工作,但在Android中它拒绝它。最好确保不要对s3存储桶名称使用非标准字符。
如果您这样做,请使用第一个链接。在这种情况下,dns查找中没有非标准字符(https://s3.amazonaws.com/..。)