Java 使用post请求从页面下载文件(需要cookies)
我已经测试了第一步(登录页面),它可以正常工作。我输入所有参数(用户、通行证等),然后可以打印结果(包含数据的页面)。问题是当我试图从该网站下载文件时。我需要第一步的饼干。在我下载的文件中,有一条消息:“会话已过期”。这是我的代码:Java 使用post请求从页面下载文件(需要cookies),java,cookies,httpurlconnection,Java,Cookies,Httpurlconnection,我已经测试了第一步(登录页面),它可以正常工作。我输入所有参数(用户、通行证等),然后可以打印结果(包含数据的页面)。问题是当我试图从该网站下载文件时。我需要第一步的饼干。在我下载的文件中,有一条消息:“会话已过期”。这是我的代码: URL login = new URL("..."); URL download_page = new URL("..."); URL document_link new URL("..."); //String for request String da
URL login = new URL("...");
URL download_page = new URL("...");
URL document_link new URL("...");
//String for request
String data_post = "username=name&password=1234&other_data=...";
//Login page
HttpURLConnection conn = (HttpURLConnection)login.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data_post);
wr.close();
conn.connect();
//Download page
HttpURLConnection connDownload = (HttpURLConnection)download_page.openConnection();
connDownload.connect();
//Link to the file
HttpURLConnection connFile = (HttpURLConnection)document_link.openConnection();
connFile.connect();
BufferedInputStream in = new BufferedInputStream(connFile.getInputStream());
File saveFile = new File("myfile.txt");
OutputStream out = new BufferedOutputStream(new FileOutputStream(saveFile));
byte[] buf = new byte[256];
int n = 0;
while ((n=in.read(buf))>=0) {
out.write(buf, 0, n);
}
out.flush();
out.close();
提前感谢。在关闭连接之前,您是否尝试在第一页上检查cookie的标题?我想试试这样的东西:
String cookies=conn.getHeaderField(“设置Cookie”)代码>
然后在执行connect()之前,使用以下命令在以下连接中设置cookie:
connload.setRequestProperty(“Cookie”,cookies)代码>
。。。看看这是否有效…看看ApacheHttpClient-