使用Java在受密码保护的站点上下载大型文件时出现问题

使用Java在受密码保护的站点上下载大型文件时出现问题,java,security,Java,Security,通过使用java的密码验证器类并重写它,我已经能够连接到受密码保护的站点并从该站点下载文本和图像等文件。但是现在我在从同一个站点下载zip文件时遇到了一个问题。 我认为这可能与大小有关,因为拉链的大小约为3 MBs,而图像的大小约为30 kbs。因为我可以通过我的网络浏览器下载,所以应该使用相同的用户名和密码,这样就不会有问题了。没有登录名和密码,ZIP下载很好,所以我认为这与我的下载代码无关 我的理论是,存在某种身份验证超时或与较大文件相关的情况,或者在下载了一定数量的信息后,存在某种重新查询

通过使用java的密码验证器类并重写它,我已经能够连接到受密码保护的站点并从该站点下载文本和图像等文件。但是现在我在从同一个站点下载zip文件时遇到了一个问题。 我认为这可能与大小有关,因为拉链的大小约为3 MBs,而图像的大小约为30 kbs。因为我可以通过我的网络浏览器下载,所以应该使用相同的用户名和密码,这样就不会有问题了。没有登录名和密码,ZIP下载很好,所以我认为这与我的下载代码无关

我的理论是,存在某种身份验证超时或与较大文件相关的情况,或者在下载了一定数量的信息后,存在某种重新查询。然而,这是我第一次处理这个问题,所以我不知道到底是什么问题,也不知道如何解决它。感谢您的帮助

以下是相关代码:

  private class mAuthenticator extends Authenticator {
  private int numtries = 0;
  protected PasswordAuthentication getPasswordAuthentication(){
        String promptString = getRequestingPrompt();
        String hostname = getRequestingHost();
         InetAddress ipaddr = getRequestingSite();
         int port = getRequestingPort();
         String username = "foo";
         String password = "bar";
         return new PasswordAuthentication(username, password.toCharArray());
  }
 }



public String DownloadFile(String url, String placetostore, String filename){
String mString = null;
URL myURL = 
new URL(url); 
URLConnection ucon = myURL.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = 
new BufferedInputStream(is); 
ByteArrayBuffer baf = 
new ByteArrayBuffer(50); 
int current = 0; 
while((current = bis.read()) != -1){ 
baf.append((
byte)current); 
}
String fileloc = placetostore + filename;
File file = 
new File(fileloc); 
FileOutputStream fos = 
new FileOutputStream(file); 
fos.write(baf.toByteArray());
fos.close();
} 
catch (Exception e) { 
// TODO Auto-generated catch block 
e.printStackTrace();
}
return mString; 
}
我的理论是存在某种身份验证超时或与较大文件相关的内容

这不会是身份验证超时。除非服务器端是以一种最特殊的方式实现的,否则在服务器开始向GET请求发送响应之前,会检查身份验证。。。再也不会了

但是,文件的传递可能会有一个简单的超时。如果客户端读取文件花费的时间太长,服务器可能会关闭流。(这样做可能是为了节省服务器端资源,防止意外或故意的DoS攻击等)

用户/密码与非用户/密码之间的行为差异可能在于使用TLS,并且服务器被配置为针对不同消息传输的不同超时

。。。或者在下载了一定数量的信息后,会出现某种形式的重新查询

这是不可能的。该文件在单个HTTP响应消息中传递,HTTP没有在响应中途重新验证的规定


如果您发布客户端下载代码,这样我们就可以看到您是否做了一些不太理想的事情,这将是一个好主意

我的理论是存在某种身份验证超时或与较大文件相关的内容

这不会是身份验证超时。除非服务器端是以一种最特殊的方式实现的,否则在服务器开始向GET请求发送响应之前,会检查身份验证。。。再也不会了

但是,文件的传递可能会有一个简单的超时。如果客户端读取文件花费的时间太长,服务器可能会关闭流。(这样做可能是为了节省服务器端资源,防止意外或故意的DoS攻击等)

用户/密码与非用户/密码之间的行为差异可能在于使用TLS,并且服务器被配置为针对不同消息传输的不同超时

。。。或者在下载了一定数量的信息后,会出现某种形式的重新查询

这是不可能的。该文件在单个HTTP响应消息中传递,HTTP没有在响应中途重新验证的规定



如果您发布客户端下载代码,这样我们就可以看到您是否做了一些不太理想的事情,这将是一个好主意。

您应该提供一个用于从JavaI下载的代码片段。我已经添加了用于验证和下载的代码。您应该提供一个用于从JavaI下载的代码片段添加了我用来验证和下载的代码。