使用HttpClient模拟登陆
2011-02-18 11:13
211 查看
在使用Hyperic HQ做集群监控的时候,有时要按照需要使用Groovy插件对Hyperic的数据库进行查询被在浏览器中返回结果。这个查询是远程的,而且对Hyperic进行URL请求(Hyperic的Groovy插件需要通过URL调用)时,首先会临时性的跳转到登陆界面,让用户输入口令,人工操作的话当然没有什么问题,可是查询过程是完全定时的,这就需要有自动登陆功能。
Java自带的HttpURLConnection无法满足要求(或者是我没找到),后来我找到了一个叫curl的工具,它是Linux环境下,是以Shell的形式运行的,通过执行curl -u username:password url命令,可以直接获取登陆后的页面编码,可以在程序中,调用系统命令来执行这段代码,可遗憾的是,curl没法在Windows下被安装成功,而且它作为一个独立的程序而不是库的形式,显然也不是不够友好的,所以也被放弃了。最终,我找到了大名鼎鼎的HttpClient,它用起来很简单,但是找到如果自动登陆的方法,也费了一番功夫。最终解决方案是,首先观察登陆界面的源代码,发现有一个叫j_spring_security_check的函数,它申明自己是PostMethod,其中就包含了账号密码的验证,从中可以看出,账号对应的名称是j_username,密码是j_password。所以我们需要建立一个HttpClient,然后对登陆界面的URL执行PostMethod来进行模拟登陆。代码如下所示:
PostMethod post = new PostMethod(
"http://133.133.133.83:7080/j_spring_security_check");
NameValuePair username = new NameValuePair("j_username", "hqadmin");
NameValuePair password = new NameValuePair("j_password", "hqadmin");
post.setRequestBody(new NameValuePair[]{username, password});
client.executeMethod(post);
System.out.println(post.getStatusLine());
Header locationHeader = post.getResponseHeader("location");
System.out.println(locationHeader.getValue());
post.releaseConnection();
之后,在使用同一个HttpClient访问URL的话,就会被Hyperic认为是登陆过的了,可以直接使用GetMethod获取自己想要的页面。
GetMethod get = new GetMethod(
"http://133.133.133.83:7080/hqu/cloudmonitor/cloud/execute.hqu");
client.executeMethod(get);
InputStream input = get.getResponseBodyAsStream();
SAXReader sax = new SAXReader();
doc = sax.read(input);
并且通过getResponseBodyAsStream()函数,来将访问的页面转化为输入流并解析(页面的内容是XML形式的数据)。至此,我们完成了使用HttpClient来进行模拟登陆的工作。
Java自带的HttpURLConnection无法满足要求(或者是我没找到),后来我找到了一个叫curl的工具,它是Linux环境下,是以Shell的形式运行的,通过执行curl -u username:password url命令,可以直接获取登陆后的页面编码,可以在程序中,调用系统命令来执行这段代码,可遗憾的是,curl没法在Windows下被安装成功,而且它作为一个独立的程序而不是库的形式,显然也不是不够友好的,所以也被放弃了。最终,我找到了大名鼎鼎的HttpClient,它用起来很简单,但是找到如果自动登陆的方法,也费了一番功夫。最终解决方案是,首先观察登陆界面的源代码,发现有一个叫j_spring_security_check的函数,它申明自己是PostMethod,其中就包含了账号密码的验证,从中可以看出,账号对应的名称是j_username,密码是j_password。所以我们需要建立一个HttpClient,然后对登陆界面的URL执行PostMethod来进行模拟登陆。代码如下所示:
PostMethod post = new PostMethod(
"http://133.133.133.83:7080/j_spring_security_check");
NameValuePair username = new NameValuePair("j_username", "hqadmin");
NameValuePair password = new NameValuePair("j_password", "hqadmin");
post.setRequestBody(new NameValuePair[]{username, password});
client.executeMethod(post);
System.out.println(post.getStatusLine());
Header locationHeader = post.getResponseHeader("location");
System.out.println(locationHeader.getValue());
post.releaseConnection();
之后,在使用同一个HttpClient访问URL的话,就会被Hyperic认为是登陆过的了,可以直接使用GetMethod获取自己想要的页面。
GetMethod get = new GetMethod(
"http://133.133.133.83:7080/hqu/cloudmonitor/cloud/execute.hqu");
client.executeMethod(get);
InputStream input = get.getResponseBodyAsStream();
SAXReader sax = new SAXReader();
doc = sax.read(input);
并且通过getResponseBodyAsStream()函数,来将访问的页面转化为输入流并解析(页面的内容是XML形式的数据)。至此,我们完成了使用HttpClient来进行模拟登陆的工作。
相关文章推荐
- 使用httpclient模拟登陆时乱码问题
- 使用httpClient模拟登陆校内网并留言
- 使用HttpClient模拟网站登陆sina邮箱(保持远程服务器session和cookie)
- httpclient模拟登陆具体实现(使用js设置cookie)
- 使用httpClient模拟登陆开心网过程中登陆成功但是跳转不成功
- 使用Httpclient模拟登陆正方软件股份有限公司开发的教务管理系统
- Java--使用httpClient模拟登陆正方教务系统获取课表
- httpclient模拟登陆(使用js设置cookie)
- 使用httpclient模拟登陆
- java使用httpclient简单模拟登陆微信公众开放平台
- httpclient模拟登陆具体实现(使用js设置cookie)
- httpclient模拟登陆具体实现(使用js设置cookie)
- HttpClient 4.5.3 模拟登陆CSDN
- Python3网络爬虫(3):Python3使用Cookie-模拟登陆
- 日常小结-关于模拟登陆的小结-fastjson库的使用小结
- HttpClient4使用(模拟登陆)
- httpClient模拟浏览器登陆之谜
- 使用requests的session机制模拟登陆知乎
- HttpClient的使用(模拟登录)
- 使用Snoopy进行模拟登陆、采集