使用JAVA APACHE HTTPClient下载HTTP post生成的文件

使用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,但我在任何地方都看不到该文件。有人能解释一下我的问题吗 这是我的代码(我意识到它目前不会保存响应,但如果它正常工作,我会期待一些长的二进制响应) //获取

我需要登录到一个网页,下载一个文件(在帖子之后出现),然后再次注销

登录和注销都很好,但是当我尝试访问文件时遇到了一些问题

在网络浏览器中,我在按下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";