Java tutorial
/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package com.abc.turkey.service.unfreeze; import java.util.ArrayList; import org.apache.http.Header; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.ProtocolException; import org.apache.http.client.RedirectStrategy; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.abc.turkey.service.ServiceException; import com.abc.turkey.utils.SpringContextUtil; import com.alibaba.fastjson.JSON; /** * ??. * * @author calvin */ public class UnfreezeProxy { private static Logger logger = LoggerFactory.getLogger(UnfreezeProxy.class); private static final String agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"; // private CookieStore cookieStore = new BasicCookieStore(); private CloseableHttpClient httpclient = null; private SmsService smsService = null; public UnfreezeProxy() { logger.info("create proxy=="); smsService = SpringContextUtil.getBean(SmsService.class); ArrayList<Header> headers = new ArrayList<Header>(); // headers.add(new BasicHeader("Referer", referer)); headers.add(new BasicHeader("User-Agent", agent)); // forbid redirect RedirectStrategy redirectStrategy = new RedirectStrategy() { @Override public boolean isRedirected(HttpRequest arg0, HttpResponse arg1, HttpContext arg2) throws ProtocolException { // TODO Auto-generated method stub return false; } @Override public HttpUriRequest getRedirect(HttpRequest arg0, HttpResponse arg1, HttpContext arg2) throws ProtocolException { // TODO Auto-generated method stub return null; } }; httpclient = HttpClients.custom().setDefaultHeaders(headers).setRedirectStrategy(redirectStrategy).build(); } public void unfreeze(String number, String ticket, String randstr) throws Exception { logger.info("begin unfreezing: " + number); // ?? String checkUrl = "https://aq.qq.com/cn2/ajax/check_verifycode?CaptchaSig=" + ticket + "&account=" + number + "&session_type=on_rand&verify_code=" + randstr + "&flag=1&appid=1600000491"; HttpGet httpGet = new HttpGet(checkUrl); CloseableHttpResponse response = httpclient.execute(httpGet); String res = EntityUtils.toString(response.getEntity(), "utf8"); logger.debug(res); response.close(); // ? String lockUrl = "https://aq.qq.com/cn2/login_limit/checkstate?from=1&account=" + number + "&verifycode=" + randstr + "&_=1452372769684"; httpGet = new HttpGet(lockUrl); response = httpclient.execute(httpGet); res = EntityUtils.toString(response.getEntity(), "utf8"); logger.debug(res); response.close(); int lockFlag = JSON.parseObject(res).getIntValue("if_lock"); if (lockFlag == 0) { throw new ServiceException("?"); } // ??? String smsUrl = "http://aq.qq.com/cn2/login_limit/getsms?verifycode=" + randstr; httpGet = new HttpGet(smsUrl); response = httpclient.execute(httpGet); res = EntityUtils.toString(response.getEntity(), "utf8"); logger.debug(res); response.close(); // ? String smsCode = JSON.parseObject(res).getString("sms"); smsService.sendSms(smsCode); // Thread.sleep(1000); int queryTimes = 7; while (queryTimes > 0) { lockFlag = checkState2(randstr); if (lockFlag == 0) { break; } else { if (queryTimes > 3) { Thread.sleep(1000); } else { Thread.sleep(2000); } queryTimes--; } } if (lockFlag != 0) { throw new ServiceException("?"); } } private int checkState2(String randstr) throws Exception { // ? String lockUrl = "https://aq.qq.com/cn2/login_limit/checkstate?from=2&verifycode=" + randstr; HttpGet httpGet = new HttpGet(lockUrl); CloseableHttpResponse response = httpclient.execute(httpGet); String res = EntityUtils.toString(response.getEntity(), "utf8"); logger.debug(res); response.close(); return JSON.parseObject(res).getIntValue("if_lock"); } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub super.finalize(); logger.debug("clean up"); httpclient.close(); } }