首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

HTTPClient模拟登陆人们网

2012-10-07 
HTTPClient模拟登陆人人网zz:目的:http://www.iteye.com/topic/638206使用HTTPClient4.0.1登录到人人网,并

HTTPClient模拟登陆人人网

zz:

目的:http://www.iteye.com/topic/638206
使用HTTPClient4.0.1登录到人人网,并从特定的网页抓取数据。


总结&注意事项:

HttpClient(DefaultHttpClient)代表了一个会话,在同一个会话中,HttpClient对cookie自动进行管理(当然,也可以在程序中进行控制)。 在同一个会话中,当使用post或是get发起一个新的请求时,一般需要对调用前一个会话的abort()方法,否则会抛出异常。 有些网站登录成功后会重定向(302, 303),比如这里的人人网。如果发出的是post请求,需要从响应头中取出location,并再次向网站发送请求,以获取最终数据。 抓取程序不要运行地过于频繁,大部分站点都有抵制刷网站机制。人人网访问过于频繁会锁账号。 使用录制工具录制出登录时向网站发出的请求参数。在这里,我使用了badboy,导出成jmeter文件,在jmeter中就可以看到登录时向网站发送的参数列表和相应的值。 人人网属于登陆流程比较简单的网站,后一篇会介绍一家比较难搞的网站。
代码:
Java代码

    public?class?RenRen?{??????//?The?configuration?items??????private?static?String?userName?=?"YourMailinRenren";??????private?static?String?password?=?"YourPassword";??????private?static?String?redirectURL?=?"http://blog.renren.com/blog/304317577/449470467";????????//?Don't?change?the?following?URL??????private?static?String?renRenLoginURL?=?"http://www.renren.com/PLogin.do";????????//?The?HttpClient?is?used?in?one?session??????private?HttpResponse?response;??????private?DefaultHttpClient?httpclient?=?new?DefaultHttpClient();????????private?boolean?login()?{??????????HttpPost?httpost?=?new?HttpPost(renRenLoginURL);??????????//?All?the?parameters?post?to?the?web?site??????????List<NameValuePair>?nvps?=?new?ArrayList<NameValuePair>();??????????nvps.add(new?BasicNameValuePair("origURL",?redirectURL));??????????nvps.add(new?BasicNameValuePair("domain",?"renren.com"));??????????nvps.add(new?BasicNameValuePair("isplogin",?"true"));??????????nvps.add(new?BasicNameValuePair("formName",?""));??????????nvps.add(new?BasicNameValuePair("method",?""));??????????nvps.add(new?BasicNameValuePair("submit",?"登录"));??????????nvps.add(new?BasicNameValuePair("email",?userName));??????????nvps.add(new?BasicNameValuePair("password",?password));??????????try?{??????????????httpost.setEntity(new?UrlEncodedFormEntity(nvps,?HTTP.UTF_8));??????????????response?=?httpclient.execute(httpost);??????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??????????????return?false;??????????}?finally?{??????????????httpost.abort();??????????}??????????return?true;??????}????????private?String?getRedirectLocation()?{??????????Header?locationHeader?=?response.getFirstHeader("Location");??????????if?(locationHeader?==?null)?{??????????????return?null;??????????}??????????return?locationHeader.getValue();??????}????????private?String?getText(String?redirectLocation)?{??????????HttpGet?httpget?=?new?HttpGet(redirectLocation);??????????//?Create?a?response?handler??????????ResponseHandler<String>?responseHandler?=?new?BasicResponseHandler();??????????String?responseBody?=?"";??????????try?{??????????????responseBody?=?httpclient.execute(httpget,?responseHandler);??????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??????????????responseBody?=?null;??????????}?finally?{??????????????httpget.abort();??????????????httpclient.getConnectionManager().shutdown();??????????}??????????return?responseBody;??????}????????public?void?printText()?{??????????if?(login())?{??????????????String?redirectLocation?=?getRedirectLocation();??????????????if?(redirectLocation?!=?null)?{??????????????????System.out.println(getText(redirectLocation));??????????????}??????????}??????}????????public?static?void?main(String[]?args)?{??????????RenRen?renRen?=?new?RenRen();??????????renRen.printText();??????}??}?

热点排行