我想從運行在嵌入式設備上的Web服務器下載二進制文件。該文件可以通過使用 URL:http://10.10.10.10/config.bin
...進行基本http身份驗證後手動下載...現在,我想用簡單的Java應用程序自動執行此過程。通過使用基本的Java工具,我設法下載文件:從Java中的URL下載文件的方法
URL mlrrl = new URL(url);
HttpURLConnection con = (HttpURLConnection) mlrUrl.openConnection();
con.setRequestMethod("GET");
con.setAllowUserInteraction(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setConnectTimeout(10000);
con.setRequestProperty("Authorization", "Basic " + authStringEnc);
InputStream stream = con.getInputStream();
BufferedInputStream in = new BufferedInputStream(stream);
FileOutputStream file = new FileOutputStream("configDown.bin");
BufferedOutputStream out = new BufferedOutputStream(file);
int i;
while ((i = in.read()) != -1) {
out.write(i);
}
out.flush();
這似乎工作正常!與手動(通過Browser-Webinterface)下載的文件相比,生成的文件具有相同的長度,但在使用十六進制編輯器打開兩個二進制文件後,它們是不同的。
我的問題:
- 任何想法,爲什麼十六進制代碼是不同的? (可能缺少連接屬性?)
- apache.commons包中有一個copyUrlToFile-Method。作爲替代,是否可以使用基本的http認證?
- 有沒有其他的Java庫或從urls下載文件的工具?
你有沒有檢查一個是大的endian和另一個小的endian? – 2013-02-11 15:32:30
從文件的前8個字節似乎是相同的。所以我不認爲這是一個endian問題。 – Gerd 2013-02-11 15:44:46
只是一個瘋狂的想法,嘗試使用管道流(這是一個例子:http://www.devx.com/tips/Tip/12982),這將消除整數的讀/寫。 – 2013-02-11 15:53:05