需求如下:要抓取别人网站的数据,但是接口处理方法中做了登录验证
public static void main(String[] args) {
try {/**
* 模拟登录操作获取服务器返回的保存在cookie中的会话级别的sessionId
*/
HttpClient httpClient = new HttpClient();
String login_url = "http://58.62.144.187:81/Monitor/login.aspx";
PostMethod post = new PostMethod(login_url);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add( new NameValuePair("__EVENTVALIDATION","/wEWBAK+uYufCQKl1bKzCQK1qbSRCwL07qXZBhLXqB"
+"/CIQKHlQ34c1nW9SDUB+eQIVJuWaSpyI8QkicT"));
params.add( new NameValuePair("__VIEWSTATE","/wEPDwUKLTIzNjM5OTE2MmRkk6P+kNKRmJMJwlSUfrI9P8PWwKqRwB/hQmzZMsCg950="));params.add( new NameValuePair("butLogin","登录"));
params.add( new NameValuePair("txtPassword","jkxt"));
params.add( new NameValuePair("txtUserName","jkxt"));
post.setRequestBody(params.toArray(new NameValuePair[params.size()]));
httpClient.executeMethod(post);
StringBuilder cookie_str = new StringBuilder();
Header[] headersArr = post.getResponseHeaders("Set-Cookie");
for (Header h : headersArr) {
cookie_str.append(h.getValue());
}
//System.out.println(cookie_str);
/**
* 将获取到的sessionId,作为头信息去获取接口数据(这时Session中就会有用户刚才登录的信息)
*/
String data_url = "http://58.62.144.187:81/monitor/?p=Engineering/Analysis&EID=8&m=GetChartsByGroupID"
+" &startDate=2013%2F11%2F13&endDate=2013%2F11%2F19&id=341&name=Z2-3&level=1&type=x";
GetMethod get = new GetMethod(data_url);get.addRequestHeader("cookie", cookie_str.toString());
int status_code = httpClient.executeMethod(get);
if(status_code == HttpStatus.SC_OK){
String data = get.getResponseBodyAsString();
System.out.println(data);
}
} catch (Exception e) {
e.printStackTrace();
}
}