无法使用HttpURLConnection下载图像

时间:2012-01-25 17:59:28

标签: java php

我正在尝试下载文件http://images.anandtech.com/doci/5434/X79%20Extreme9Box_575px.jpg

但无法使用HttpUrlConnection,ImageIO.read甚至在php中使用file_get_contents下载它。

我无法弄清楚为什么会这样,但如果我在浏览器中查看此链接,那么在Firefox和歌剧中的标题响应都是200

请帮帮我

现在我注意到我收到了400个代码。

线程“main”中的异常java.io.IOException:服务器返回HTTP响应代码:400 for URL:http://images.anandtech.com/doci/5478/Screen Shot 2012-01-30 at 4.21.52 PM_575px.png     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

3 个答案:

答案 0 :(得分:7)

这是一个可以用来下载的Java方法。使用URLConnection保存资源:

public void saveStream( String mURL, String ofile ) throws Exception {
    InputStream in = null;
    FileOutputStream out = null;
    try {
        URL url = new URL(mURL);
        URLConnection urlConn = url.openConnection();
        in = urlConn.getInputStream();
        out = new FileOutputStream(ofile);
        int c;
        byte[] b = new byte[1024];
        while ((c = in.read(b)) != -1)
            out.write(b, 0, c);
    } finally {
        if (in != null)
            in.close();
        if (out != null)
            out.close();
    }
}

并称之为:

saveStream("http://images.anandtech.com/doci/5434/X79%20Extreme9Box_575px.jpg",
           "/home/john/saved.gif");

答案 1 :(得分:4)

它对我来说很好。

String path = "C:\\image.jpg";
URL url = new URL("http://images.anandtech.com/doci/5434/X79%20Extreme9Box_575px.jpg");
BufferedImage image = ImageIO.read(url);
ImageIO.write(image, "jpg", new File(path));

您还可以尝试在代码中添加User-Agent字符串。

URLConnection myconn = url.openConnection();

myconn.setRequestProperty("User-Agent","User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");

答案 2 :(得分:1)

也许服务器只允许特定的用户代理访问映像。尝试通过connection.setRequestProperty ("User-agent", "Mozilla/5.0");设置您的用户代理。