如何从Java登录和下载https网页中的文件?

Ry.*_*Ry. 3 java https

我必须登录https网页并使用Java下载文件.我事先知道所有的URL:

baseURL = // a https URL;
urlMap = new HashMap<String, URL>();
urlMap.put("login", new URL(baseURL, "exec.asp?login=username&pass=XPTO"));
urlMap.put("logout", new URL(baseURL, "exec.asp?exec.asp?page=999"));
urlMap.put("file", new URL(baseURL, "exec.asp?file=111"));
Run Code Online (Sandbox Code Playgroud)

如果我在像Firefox这样的网络浏览器中尝试所有这些链接,它们都能正常工作.

现在我做的时候:

urlConnection = urlMap.get("login").openConnection();
urlConnection.connect();
BufferedReader in = new BufferedReader(
    new InputStreamReader(urlConnection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
in.close();
Run Code Online (Sandbox Code Playgroud)

我刚刚再次返回登录页面HTML,我无法进行文件下载.

谢谢!

Jac*_*son 5

我同意Alnitak的观点,即问题可能是存储和返回cookie.

我使用的另一个好选择是来自Jakarta Commons的HttpClient.

另外值得注意的是,如果这是您控制的服务器,您应该知道将用户名和密码作为查询字符串发送是不安全的(即使您使用的是HTTPS).HttpClient支持使用POST发送参数,您应该考虑这些参数.

  • 如果您使用HTTPS,基于URL的查询参数如何不安全?HTTP请求与交换的其余部分一起加密.它通常在浏览器中不安全,因为该信息通常存储在历史记录中. (2认同)