【发布时间】:2015-12-20 03:21:10
【问题描述】:
假设我在某个 URL (http://www.example.com/specialimages/cutepuppy.png) 有一张图片。此图像恰好是付费应用程序的一部分,我不希望人们转到此 URL 以右键单击并保存。所以,我添加了 htaccess 密码保护。完美的!它有效... URL 受到保护,只有我可以使用有效凭据访问它。 (真的,任何有用户名和密码的人都可以。)
接下来,在 Android 中,我使用 Universal-Image-Loader 库将图像加载到我的应用中。加载器代码如下所示:
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(
"http://Validuser:Validuserpassword@www.example.com/specialimages/cutepuppy.png",
gridViewImageHolder.imageView,
ImageLoaderUtil.options);
Validuser:Validuserpassword 是this 访问受 htaccess 保护的 URL 的小技巧。除了图像加载器抛出 FileNoteFoundException 因为 URL 无效之外,一切似乎都是合乎逻辑的:
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: http://Validuser:Validuserpassword@www.example.com/specialimages/cutepuppy.png.jpg
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: java.io.FileNotFoundException: http://Validuser:Validuserpassword@www.example.com/specialimages/cutepuppy.png.jpg
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromNetwork(BaseImageDownloader.java:124)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:291)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:274)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:230)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:136)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
09-22 16:47:30.554 19323-19365/com.example.images E/ImageLoader: at java.lang.Thread.run(Thread.java:818)
那么...我的问题是什么?我想知道是否有另一种方法可以做这样的事情:通过浏览器保护 web 目录免受访问者的访问,但以某种方式在 Android 代码 (Java) 中传递有效凭据,以便应用程序,并且只有应用程序,可以去抓取图片。
编辑
如果我在笔记本电脑或手机上的浏览器中使用Validuser:Validuserpassword 之前访问我的 URL(当然不是这个),图像加载正常...我的服务器配置正确以处理 htaccess。
【问题讨论】:
-
如果您通过 curl 或 Web 浏览器加载有效的 URL,您会看到图像吗?只需 100% 验证您的服务器/Apache 等是否正确处理了 URL?
-
是的。它在网页版 Chrome 和我的手机上完美加载。将其添加到问题中。