Java Android:从受密码保护的网站下载文件

Java Android:从受密码保护的网站下载文件,java,android,urlconnection,Java,Android,Urlconnection,我需要从一个网站下载一些pdf文件,在那里用户必须登录才能下载任何文件 如果用户未登录该站点,则指向pdf文件的链接将重定向到登录页面 我设法将用户凭据发布到登录页面并从响应中保存cookie,在尝试下载时,我尝试将cookie提供给URLConnection,但我仍然获得登录页面而不是pdf文件 更新:添加了代码 发布用户凭据: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestM

我需要从一个网站下载一些pdf文件,在那里用户必须登录才能下载任何文件

如果用户未登录该站点,则指向pdf文件的链接将重定向到登录页面

我设法将用户凭据发布到登录页面并从响应中保存cookie,在尝试下载时,我尝试将cookie提供给
URLConnection
,但我仍然获得登录页面而不是pdf文件

更新:添加了代码

发布用户凭据:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write("username=" + username + "&password=" + password);
writer.flush();
writer.close();
os.close();

String result = HttpUtils.getResponseString(conn);
if (result.indexOf("Invalid") == -1) {
    String cookie = conn.getHeaderField("set-cookie");
    return cookie;
}
然后存储cookie并在以下代码段中使用

正在尝试下载pdf:

URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", _cookie);
conn.connect();
InputStream inStream = new BufferedInputStream(url.openStream(), 1024);
OutputStream outStream = new FileOutputStream(_pdfFile);
byte buffer[] = new byte[1024];
int count = 0;
while ((count = inStream.read(buffer)) != -1)
    outStream.write(buffer, 0, count);
outStream.flush();
outStream.close();
inStream.close();

请尝试通过命令行中的
curl
调试此下载流。@LinX64我添加了代码,但无法正确设置格式。没问题,只需在编辑器中使用{},我就完成了。在浏览器中进行下载时嗅探HTTP流量。我打赌你要么忘记在后续请求中传递cookie,要么在登录成功后丢失cookie。或者您缺少重定向或导致成功登录后设置cookie的内容。@JimW我按照您的建议嗅探了流量。登录页面返回两个cookie(其中一个是“已删除”,可能没有发送到java代码),也没有重定向。