为什么我的HTTPS文件下载会破坏.zip文件?

时间:2016-02-05 00:34:28

标签: java http ssl https zip

我正在尝试使用以下代码从互联网下载zip文件:

public void getFile(String updateURL) throws Exception {

    URL url = new URL(updateURL);
    HttpURLConnection httpsConn = (HttpURLConnection) url.openConnection();
    httpsConn.setRequestMethod("GET");

    TrustModifier.relaxHostChecking(httpsConn);

    int responseCode = httpsConn.getResponseCode();

    if (responseCode == HttpsURLConnection.HTTP_OK) {

        String fileName = "fileFromNet";

        try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
            ReadableByteChannel rbc = Channels.newChannel(httpsConn.getInputStream());
            outputStream.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        }       

    }
    httpsConn.disconnect();
} 

TrustModifier是一个用于解决“信任问题”的类:http://www.obsidianscheduler.com/blog/ignoring-self-signed-certificates-in-java/

上面的代码适用于通过普通http或通过https公开的非压缩文件提供的zip文件但是如果我尝试下载通过https端点公开的zip文件,则只会下载一小段原始文件。我已经测试了来自互联网的不同下载链接,并且总是得到相同的结果。

有人知道我在这里做错了什么吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

必须在循环中调用

transferFrom(),直到传输完成,在这种情况下,您可以知道的唯一方法是将transferFrom()的返回值相加,直到它们等于Content- HTTP响应的长度。

答案 1 :(得分:-2)

实际上问题出在我用来关闭服务器证书检查的TrustModifier类中。一旦我删除它,因为我不再需要它(我从服务器获取证书并将其放在本地信任存储区),我的问题解决了。

相关问题