使用' POST'正在下载文件在http和https下表现不同?

时间:2018-01-08 03:32:43

标签: java urlconnection

服务器(例如,http(s)://IP/file,支持http和https),用户可以通过这种方式下载文件:在网页上,点击按钮发布内容以获得下载权限( HTML代码:<td>&nbsp;&nbsp;<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>&nbsp;&nbsp;<INPUT NAME="pw" TYPE="password"></td></tr><tr><td></td><td>&nbsp;&nbsp;<INPUT TYPE="submit"VALUE="Download"></td></tr></table></FORM><FORM <br /></i></p></td>
  </tr>
 </table>
</body></html>

现在我的第二个问题是,虽然我得到了html源代码而不是我要下载的文件?

任何人都可以告诉我答案或发布我可以参考的链接吗?感谢。

0 个答案:

没有答案