服务器(例如,http(s)://IP/file
,支持http和https),用户可以通过这种方式下载文件:在网页上,点击按钮发布内容以获得下载权限( HTML代码:<td> <INPUT TYPE="submit"VALUE="Download"></td>
),然后用户可以获取该文件。
现在我想在java中使用URLConnection模拟操作。我设法在http下载但在https下失败了。以下是我的代码的功能部分:
String str;
Map<String, List<String>> headerFields = connection.getHeaderFields();
System.out.println(headerFields);
str = headerFields.get("Content-Disposition").get(0);
fileName = str.substring(str.indexOf("Name"), str.length() - 1);
int length = Integer.parseInt(str.substring(str.length() - 3));
byte[] out = new byte[length];
DataInputStream dis = new DataInputStream(Common.connection.getInputStream());
dis.read(out);
String tar = Directory + fileName;
FileOutputStream fos = new FileOutputStream(tar);
fos.write(out);
在http下,System.out.println(headerFields)
获取:
{Accept-Ranges = [bytes],null = [HTTP / 1.0 200 OK],Cache-Control = [no-cache],Server = [Serv],Content-Disposition = [attachment; filename =&#34; Name_SN016.dat&#34;],Expires = [ - 1],Pragma = [no-cache], Content-Type = [application / octet-stream Content-Length:510 ] }
在https下,相同的代码只有: {null = [HTTP / 1.0 200 OK]}。后面的代码无法正确执行。
我的第一个问题是,为什么服务器对http和https的反应如此不同?在这种情况下,如何定义文件的长度? available()
是否可靠,因为api说它&#34;返回估计可以读取的字节数&#34;?
然后我将代码更改为:
fileName = "abc";
int length = 1024;
byte[] out = new byte[length];
DataInputStream dis = new DataInputStream(connection.getInputStream());
dis.read(out);
String tar = Directory + fileName;
FileOutputStream fos = new FileOutputStream(tar);
fos.write(out);
出现奇怪的事情:在http下,我将abc文件作为二进制文件获取,我认为这是正确的;在https下,我将abc文件作为纯文本文件,其中包含网页的html源代码,例如:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Serv</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
body {margin: 0px;}
</style>
</head>
<body>
<table width="100%" height="100%" align="left" border="0" cellspacing="0">
<tr>
<td colspan="2" height="*" valign="top" align="left" ><br />Download:<br/><br/><FORM ENCTYPE="multipart/form-data" method="post"><table><tr><td>Password:</td><td> <INPUT NAME="pw" TYPE="password"></td></tr><tr><td></td><td> <INPUT TYPE="submit"VALUE="Download"></td></tr></table></FORM><FORM <br /></i></p></td>
</tr>
</table>
</body></html>
现在我的第二个问题是,虽然我得到了html源代码而不是我要下载的文件?
任何人都可以告诉我答案或发布我可以参考的链接吗?感谢。