我需要登录一个网站,点击几个链接到最终屏幕下载一些数据,这里是步骤:
这是我的问题: 我正在使用Httpclient。它通过了登录页面,它可以到达第三页,但它只是 返回页面上的静态部分,不返回基于输入'帐号'的部分动态生成的数据。
以下是代码:
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(loginUrl);
PostMethod postMethod = new PostMethod(serverUrl);
// Prepare login parameters
NameValuePair[] data = {
new NameValuePair("passUID",account),
new NameValuePair("passUCD",password)
};
postMethod.setRequestBody(data);
// I can print out the html code of the login page here
//request the third page with URL: serverUrl4
postMethod = new PostMethod(serverUrl4);
NameValuePair[] data2 = {
new NameValuePair("passUID",account),
new NameValuePair("passUCD",""),
new NameValuePair("page", "view"),
new NameValuePair("procacct", "0"),
new NameValuePair("AcctNo", "xxxxxxxxx")
};
postMethod.setRequestBody(data2);
client.executeMethod(postMethod);
byte[] responseBody = postMethod.getResponseBody();
如果我将URL与上面的namevaluepairs粘贴到浏览器的URL中,则会正确显示帐户数据。但响应主体不会返回动态生成的帐户数据,还会返回其他任何内容,但会显示“帐户数据”部分。
有人知道为什么吗?任何帮助都非常感谢。
答案 0 :(得分:2)
相关网页是否使用JavaScript生成此数据?如果是这样,HTTPClient就不足以获得你想要的东西。
答案 1 :(得分:0)
通常在POST后会有来自服务器的redirect
请求(HTTP / 1.1 302),检查服务器响应的状态代码。此外,您应该提供服务器用来识别登录用户的cookies
。
修改强>
希望此代码段有帮助:
if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
Header locationHeader = postMethod.getResponseHeader("location");
if (locationHeader != null) {
String location = locationHeader.getValue();
System.out.println("The page was redirected to:" + location);
/* **strong text**
here is code to handle redirect to
"location" got from response headers
*/
} else {
System.err.println("Location field value is null.");
}
}