使用Java下载文件,没有api,奇怪的错误

时间:2015-04-26 19:07:35

标签: java web-scraping

我正在尝试通过点击Excel图标从this网站下载文件。通过右键单击图标,我得到了粘贴到我的java程序的链接:

public static void main(String[] args){

    BufferedReader br;
    String thisLine="";
    String file="";
    try {
      // connect and download the file
      ReadableByteChannel rbc;
      file="test.xls";
      URL website = new URL("http://www.anaptyxi.gov.gr/DesktopModules" +
                "/AVMap.ErgaReports_v2/SearchHandler.ashx?lang=el-GR" +
                "&pageMode=3&searchValue=&searchField=&dateFrom=&dateTo=" +
                "&perioxesMode=2&selectedPerioxes[]=01_36_514&ergaType[]=1" +
                "&ergaType[]=2&ergaType[]=3&enisx=&kad=&company=&includePollaplhs=1" +
                "&export=xls");
      rbc = Channels.newChannel(website.openStream());

      FileOutputStream xls = new FileOutputStream(file);  
      xls.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);             
      xls.close();               
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

这会创建一个Excel文件,但它只包含字符串:

  

执行请求时出错。尝试限制您的标准。   有什么想法吗?

3 个答案:

答案 0 :(得分:1)

该网站可能正在检查User-Agent标题但没有回复,因为您正在使用java。

这应该解决它:

   public static void main(String[] args){

   BufferedReader br;
   String thisLine="";
   String file="";
   try {
       //   connect and download the file
      ReadableByteChannel rbc;
      file="test.xls";
      // connect and download the file
      URL website = new URL("http://www.anaptyxi.gov.gr/DesktopModules" +
                        "/AVMap.ErgaReports_v2/SearchHandler.ashx?lang=el-GR" +
                        "&pageMode=3&searchValue=&searchField=&dateFrom=&dateTo=" +
                        "&perioxesMode=2&selectedPerioxes[]=01_36_514&ergaType[]=1" +
                        "&ergaType[]=2&ergaType[]=3&enisx=&kad=&company=&includePollaplhs=1" +
                        "&export=xls");

      // Adding request headers to mimic the browser
      URLConnection con = website.openConnection();
      con.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
      con.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36");
      rbc = Channels.newChannel(con.getInputStream());  // !!!


      FileOutputStream xls = new FileOutputStream(file);  
      xls.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);             
      xls.close();               
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   

答案 1 :(得分:0)

如果使用java 8,它应该是这样的。

<div class="col-md-3">
            <img class="img-responsive" id="logo" src="img/logo.png">
        </div>

答案 2 :(得分:0)

您的网址有问题。通常在发出HTTP类型请求时,您需要检查响应代码,如果不是200则发生了不好的事情。除了可能的错误响应代码之外,看起来服务也在正文中返回错误而不是预期数据,也许请求的查询将返回太多数据,因此“尝试限制标准。”

阅读使用您正在调用的服务定义的SLA,它可能会说明在任何一个调用中可以返回多少数据