所以我一直在尝试从受密码保护的网址下载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");
}
答案 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