众所周知,浏览器通过cookies记录用户登陆的一些信息,这样用户下次可以自动登陆等。基于这点,我们可以在后台通过模拟cookies信息,然后将cookies信息设置到httpclient里,从而达到免除登陆的目的。以下是实现代码:
httpclient是org.apache.commom包
private static BasicClientCookie setWeiboCookies(String name,String value,String date){
BasicClientCookie2 cookie = new BasicClientCookie2(name,value);
cookie.setDomain(".weibo.com");
cookie.setPath("/");
if (StringUtils.isNotBlank(date)) {
cookie.setExpiryDate(new Date(date));
}else{
cookie.setExpiryDate(null);
}
return cookie;
}
public static void test(){
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter("http.protocol.cookie-policy",
CookiePolicy.BROWSER_COMPATIBILITY);
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 1000*60*10);
DefaultHttpRequestRetryHandler dhr = new DefaultHttpRequestRetryHandler(3,true);
HttpContext localContext = new BasicHttpContext();
HttpRequest request2 = (HttpRequest) localContext.getAttribute(
ExecutionContext.HTTP_REQUEST);
httpclient.setHttpRequestRetryHandler(dhr);
BasicCookieStore cookieStore = new BasicCookieStore();
/**
* weibo.com
*/
cookieStore.addCookie(setWeiboCookies("SUS", "查看浏览器的SUS值", null)); //ok
cookieStore.addCookie(setWeiboCookies("SUP", "查看浏览器的SUP值", null) ); //ok
cookieStore.addCookie(setWeiboCookies("SUE","查看浏览器SUE值",null)); //ok
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet request = new HttpGet();
request.setURI(URI.create("http://weibo.com"));
HttpResponse response = null;
try {
response = httpclient.execute(request,localContext);
System.out.println(EntityUtils.toString(response.getEntity(), "utf-8"));
} catch (IOException e) {
System.out.println(e);
}