从互联网上下载文件返回Java上的错误400,浏览器工作正常

时间:2015-04-10 10:38:31

标签: java

我需要从这个网页下载一个使用java的文件 http://www.okaa.gr/files/1/%CE%9F%CE%9A%CE%91%CE%91/%CE%A4%CE%99%CE%9C%CE%95%CE%A3 %CE%A7%CE%9F%CE%9D%CE%94%CE%A1%CE%99%CE%9A%CE%97%CE%A3/20150409-pasxa.pdf 希腊字母中有文字。 如果您在浏览器上使用此URL,它可以正常工作,并打开一个pdf文件。在Java中使用它,我得到400错误。 我使用了许多不同的方法,假设我做了我想要的,但他们都得到了同样的错误。 这适用于不同的站点和不同的文件

    String okaa="http://www.okaa.gr/";
    String link="gr/nea-kai-anakoinoseis/statistika-deltia-timon/?date=09&month=4&year=2015&catname=0";
     URL okaaLink = new URL(okaa+link);
     BufferedReader in = new BufferedReader(
     new InputStreamReader(okaaLink.openStream()));
     ArrayList<String> links =new ArrayList<String>();

     String inputLine;
     while ((inputLine = in.readLine()) != null)
         {
           if(inputLine.contains(".pdf"))
                {
                    String newLink=inputLine.substring(inputLine.indexOf("href")+6,inputLine.indexOf("download")-2);
                    links.add(okaa+newLink);    
                    }
                }

    in.close();

ArrayList<String> links =new ArrayList<String>();
links.add(url);  //the url in question  
for (int i=0;i<links.size();i++)
    {
//   download and save the file
        URL website = new URL(links.get(i));//the url link
        ReadableByteChannel rbc = Channels.newChannel(website.openStream());    

        FileOutputStream fos = new FileOutputStream(i+".pdf");             
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);            
        fos.close();    
}

任何帮助?

编辑: 更新的代码。我首先从主页面读取链接列表,删除html部分(substring命令)并将其传递给ArrayList。 然后使用数组列表上的URL我想下载文件 但即使我从浏览器中复制网址并将其直接粘贴到命令URL website = new URL("....");

中,这也不起作用

解决:

谢谢@Yannick,我所要做的就是使用newLink=newLink.replaceAll("\\s","");

删除空格

我永远都不会想到它!

2 个答案:

答案 0 :(得分:3)

问题可能是链接包含空格

  

...%A3%CE ...

您的浏览器会自动将“”替换为“”,因为带有空格的链接无效。

newuserua_ext 的解决方案不包含此空格,这可能是它起作用的原因。

答案 1 :(得分:0)

这就是我尝试并下载的pdf文件;

ArrayList<String> links = new ArrayList<String>();

    links.add("http://www.okaa.gr/files/1/%CE%9F%CE%9A%CE%91%CE%91/%CE%A4%CE%99%CE%9C%CE%95%CE%A3%20%CE%A7%CE%9F%CE%9D%CE%94%CE%A1%CE%99%CE%9A%CE%97%CE%A3/20150409-pasxa.pdf");

    for (int i = 0; i < links.size(); i++) {
        System.out.println("opening connection");
        URL url = new URL(links.get(i));

        InputStream in = url.openStream();
        FileOutputStream fos = new FileOutputStream(new File(i + ".pdf"));

        System.out.println("reading file...");
        int length = -1;
        byte[] buffer = new byte[1024];// buffer for portion of data from
                                // connection
        while ((length = in.read(buffer)) > -1) {
            fos.write(buffer, 0, length);
        }
        fos.close();
        in.close();
        System.out.println("file was downloaded");
    }

输出;

Output