从具有密码保护的网页下载pdf

时间:2015-08-11 10:50:51

标签: java html url pdf jsoup

所以我一直在尝试从受密码保护的网址下载pdf。我可以使用Jsoup访问该网页,因为这不支持PDF文件(URL是PDF文件的链接)。如何确保我不必重新输入用户名和密码?我不能使用URLConnection,因为这不允许我登录网站。谢谢你的帮助。

    System.out.println("opening connection");
    URL url = new URL("https://www.HIDDEN.com/ciqdotnet/login.aspx?redirect=%2fCIQDotNet%2fFilings%2fDocumentRedirector.axd%3fversionId%3d" + ID + "%26type%3dpdf%26forcedownload%3dfalse");
    InputStream in = url.openStream();
    FileOutputStream fos = new FileOutputStream("/Users/HIDDEN/Desktop/fullreport.pdf");

    System.out.println("reading file...");
    int length = -1;
    byte[] buffer = new byte[1024];// buffer for portion of data from
    // connection
    while ((length = in.read(buffer)) > -1) {
        fos.write(buffer, 0, length);
    }
    fos.close();
    in.close();
    System.out.println("file was downloaded");
    }

1 个答案:

答案 0 :(得分:1)

您需要将凭据添加到URL连接的HTTP标头。

如果您已经登录,则需要从Cookie存储中提取Cookie并将Cookie哈希与请求一起发送。

如果所有这些听起来太复杂,请使用Apache HttpComponents。该框架具有各种支持代码来设置您的请求,添加用户/密码凭据和/或处理cookie。

[编辑] 您可以在此处找到Apache HttpClient(使用HttpComponents)的示例代码:https://hc.apache.org/httpcomponents-client-ga/examples.html

HttpClient可以执行"下载" Web浏览器的一部分。简而言之,url.openStream()将向服务器发送GET请求。

您可以在此处找到如何针对服务器进行身份验证的示例:https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientAuthentication.java

如果您已经登录,则会有一个Cookie。使用此代码将cookie传递给HttpClient:Apache HttpClient 4.0.3 - how do I set cookie with sessionID for POST request