2015-04-26 23 views
1

我試圖通過單擊Excel圖標從this網站下載文件。通過圖標上右擊我,我貼到我的java程序這樣的鏈接:使用Java下載文件,無api,奇怪的錯誤

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文件,但它僅包含字符串:

錯誤執行請求。嘗試限制你的標準。 有什麼建議嗎?

+0

你真的打破了你的URL字符串線,如您發佈? –

+0

不,我發佈它的方式更容易閱讀 –

+0

得到它的工作,檢查我的答案。 –

回答

0

這是應該如何看,如果使用Java 8

import java.io.IOException; 
import java.net.URL; 
import java.nio.file.FileSystems; 
import java.nio.file.Files; 

public class Main { 
    public static void main(String[] args) { 

     try { 
      // 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"); 
      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"); 

      Files.copy(con.getInputStream(), FileSystems.getDefault().getPath("test.html")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

像有什麼東西不對您的網址。通常,在發出HTTP類型的請求時,如果發生的不是200錯誤,您需要檢查響應代碼。除了可能的錯誤響應代碼之外,看起來服務正在主體中返回一個錯誤,而不是預期的數據,可能請求的查詢將返回太多的數據,因此「嘗試限制條件」。

在SLA閱讀了你打電話的服務定義的,它很可能會說一些關於有多少數據可以在任何一個呼叫

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(); 
    } 
+0

Files.copy(con.getInputStream(),FileSystems.getDefault()。getPath(「test.txt」));給我一個錯誤「FileSystem類型中的方法getPath(String,String [])不適用於參數(String)」 –

+0

我們可能使用不同版本的jdk。我正在使用1.8.0 只關注使用URL連接並添加User-Agent請求屬性。 –

+0

我在Linux下有相同的版本(Oracle Java不是OpenJava)。將再次研究它。 –