使用JAVA APACHE HTTPClient下载HTTP post生成的文件
我需要登录到一个网页,下载一个文件(在帖子之后出现),然后再次注销 登录和注销都很好,但是当我尝试访问文件时遇到了一些问题 在网络浏览器中,我在按下OK键后填写表单,它会显示一个网页“成功”,并显示一个文件下载框 当我通过HTTP客户端(复制firebug在FF中使用的参数)执行相同的操作时,我得到的所有响应都是response.entity,但我在任何地方都看不到该文件。有人能解释一下我的问题吗 这是我的代码(我意识到它目前不会保存响应,但如果它正常工作,我会期待一些长的二进制响应)使用JAVA APACHE HTTPClient下载HTTP post生成的文件,java,apache,post,download,apache-httpclient-4.x,Java,Apache,Post,Download,Apache Httpclient 4.x,我需要登录到一个网页,下载一个文件(在帖子之后出现),然后再次注销 登录和注销都很好,但是当我尝试访问文件时遇到了一些问题 在网络浏览器中,我在按下OK键后填写表单,它会显示一个网页“成功”,并显示一个文件下载框 当我通过HTTP客户端(复制firebug在FF中使用的参数)执行相同的操作时,我得到的所有响应都是response.entity,但我在任何地方都看不到该文件。有人能解释一下我的问题吗 这是我的代码(我意识到它目前不会保存响应,但如果它正常工作,我会期待一些长的二进制响应) //获取
//获取数据
HttpPost=新的HttpPost(“https://webpage.com.au/folder/getfile.asp?param=2");
List-nvps=newarraylist();
添加(新的BasicNameValuePair(“p1”、“0”);
添加(新的BasicNameValuePair(“p2”、“03”);
添加(新的BasicNameValuePair(“p3”、“1”);
添加(新的BasicNameValuePair(“p4”、“6”);
新增(新的BasicNameValuePair(“p5”、“1”);
添加(新的BasicNameValuePair(“p6”、“2”);
添加(新的BasicNameValuePair(“p7”、“1”);
添加(新的BasicNameValuePair(“p8”、“0”);
添加(新的BasicNameValuePair(“p9”、“G”);
setEntity(新的UrlEncodedFormEntity(nvps,Consts.UTF_8));
response=httpclient.execute(httpost);
entity=response.getEntity();
打印响应(实体);
System.out.println(“获取文件post:+response.getStatusLine());
EntityUtils.consume(实体);
System.out.println(“Post文件获取cookies:”);
打印cookies(httpclient);
答复如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="language" content="en-us"/>
<meta name="robots" content="noindex, nofollow"/>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="-1"/>
<link rel="stylesheet" href="/css/style.css" type="text/css"/>
<script language="javascript">
var wasSubmitted = false;
function SingleSubmit ()
{
var OK = !wasSubmitted;
wasSubmitted = true;
return OK;
}
</script>
</head>
<body bgcolor="#FFFFFF" text="black" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<br>
<center><br><p class="center"></p><p class="center"></p><p class="center">getting file<br>
<script language=Javascript>
document.location = "TransSumExcel.asp";
</script>
</center>
</body>
</html>
var=false;
函数SingleSubmit()
{
var OK=!wassmitted;
wassmitted=true;
返回OK;
}
获取文件
document.location=“TransSumExcel.asp”;
从响应文本中可以看出,通过javascript调用,浏览器被引导加载“TransSumExcel.asp”
document.location = "TransSumExcel.asp";
因此,在发布请求后,您需要立即为@manverdra发出GET请求,谢谢!这几乎是一个完美的答案,表明我缺乏JS技能!不幸的是,它没有完全工作…我现在得到一个下载的文件,但它是空的,除了CSV头。有什么想法吗?试试看。您可以检查浏览器和web服务器之间的通信,并查看发布的内容(所有请求参数和cookie)。一些web应用程序会检查referer头,如果它与他们期望的不匹配,他们可以拒绝请求并返回空响应。使用Fiddler,您可以看到确切的请求,如果您使用HTTP客户端模拟相同的请求,您应该能够使其工作
document.location = "TransSumExcel.asp";