0

我想从嵌入式设备上运行的网络服务器下载二进制文件。该文件可以通过使用该 URL 在基本的 http 身份验证后手动下载:http://10.10.10.10/config.bin... 现在我想使用一个简单的 Java 应用程序自动执行此过程。通过使用基本的 java 工具,我设法下载了文件:

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();

这似乎工作正常!与手动(通过浏览器 Web 界面)下载的文件相比,生成的文件具有相同的长度,但在使用十六进制编辑器打开两个二进制文件后,它们是不同的。

我的问题:

  1. 任何想法为什么十六进制代码不同?(也许缺少连接属性?)
  2. apache.commons 包中有一个 copyUrlToFile-Method。是否可以将它与基本的 http 身份验证一起使用,作为替代方案?
  3. 是否有其他 Java 库或工具可用于从 url 下载文件?
4

2 回答 2

1

恕我直言,使用(已弃用)Apache Commons HttpClient(http://hc.apache.org/httpclient-3.x/)是最简单的方法。或者,您可以使用新的和(据说)改进的 HttpComponents ( http://hc.apache.org/ )。

于 2013-02-12T11:52:53.363 回答
0

我无法解释原因,但错误的属性“setDoOutput”=“true”可能会影响下载文件的内容。将值设置为“false”为我解决了这个问题!

于 2013-02-12T11:42:37.540 回答