在Android上下载imgur图像

时间:2014-08-14 21:42:47

标签: android

我正在尝试从传入的共享意图中下载一个图像,这是一个url字符串...它适用于所有其他情况(我已经尝试过),除了那些来自imgur的情况。我最终得到的是:

imgur error

有没有人有任何想法可能是什么原因?

我用来下载文件的代码是:

// Got this here: http://wininterview.blogspot.co.uk/2013/04/download-file-in-android-from-remote.html
public static void downloadFile( String url, String destination ) {
    try {
        URL u = new URL(url);
        File file = new File(destination);

        URLConnection ucon = u.openConnection();
        InputStream is = ucon.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);

        /*
         * Read bytes to the Buffer until there is nothing more to read(-1).
         */
        ByteArrayBuffer baf = new ByteArrayBuffer(50);
        int current = 0;
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
        }

        FileOutputStream fos = new FileOutputStream(file);
        fos.write(baf.toByteArray());
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我要下载的目的地是this.getCacheDir().getPath() + "/" + fileName

在任何人尝试推荐使用imgur API之前,我宁愿尝试找到解决方法,因为传入的意图可以是来自任何地方的图像的网址。

编辑:我尝试使用命令行中的curl下载相同的文件URL,它运行正常。

编辑:有趣的是,如果我执行u.openConnection().getContentLength()它已经给我503,所以我甚至无法欺骗请求标头(我也尝试过)。

2 个答案:

答案 0 :(得分:0)

我看到一个网站拒绝了没有用户代理字符串的请求。 我不得不添加

private static String USER_AGENT = "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; GT-I9000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";

请求:

            HttpGet request = new HttpGet(uri[0]);
            request.setHeader("User-Agent", USER_AGENT);
            response = httpclient.execute(request);

我没有使用URLConnection,但在服务器端应该没有区别。 如果你愿意,我可以发布曾经工作过的代码。 OTOH,我确定是否是问题的原因。

PS我还看到了-e中需要--referercurl)切换的网站。没有-e他们检索了一个带有.zip链接的html而不是.zip本身。

答案 1 :(得分:0)

我弄清楚了......我在某个时刻在图片网址上调用了.toLowerCase(),并且imgur的网址非常区分大小写。