上一篇讲了每日自动登陆淘宝领取金币,这一篇讲讲如何登陆360,并每日自动签到
这次的难点主要集中在登陆这里了,开始抓包发现360登陆验证很麻烦,但是后来发现一个简单的方法。
因为我安装了360安全卫士,发现点击那个金币的按钮能直接验证登陆,哈哈~所以httpclient直接get这个url就能创建cookie完成登陆了~
上面说的不明白,看图:
具体请看代码了:
import java.io.IOException; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sf.json.JSONObject; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.params.CookiePolicy; import org.apache.http.client.params.HttpClientParams; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; import com.kae.common.CustomerHttpClient; import com.kae.common.DummyRedirectHandler; /** * * @ClassName: Jifen360 * @Description: 360积分 * @author kaedeen.com * @date 2013-11-22 下午9:28:24 * */ public class Jifen360 { private static final Logger logger = Logger.getLogger(Jifen360.class); private static DefaultHttpClient httpclient = null;// HttpClient对象 private static HttpResponse response = null; private String url = ""; public Jifen360(String url) { this.url = url; } /** * 签到 * * @return */ @SuppressWarnings({ "deprecation","rawtypes" }) public boolean signIn() { boolean flag = false; httpclient = new DefaultHttpClient(); // 设定cookie策略 HttpClientParams.setCookiePolicy(httpclient.getParams(), CookiePolicy.BROWSER_COMPATIBILITY); httpclient.setRedirectHandler(new DummyRedirectHandler()); HttpGet httpGet = new HttpGet(url); try { response = httpclient.execute(httpGet); } catch (ClientProtocolException e) { // TODO Auto-generated catch block logger.error("Jifen360 signIn ClientProtocolException:"+e.toString()); } catch (IOException e) { // TODO Auto-generated catch block logger.error("Jifen360 signIn IOException:"+e.toString()); } finally { httpGet.abort(); } String token = getToken(); // 请求签到链接 String signInUrl="http://jifen.360.cn/safe/ajax_signin.html?token="+token; HttpPost httppost = new HttpPost(signInUrl); httppost.setHeader("Accept", "*/*"); httppost.setHeader("Accept-Language","zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4,zh-TW;q=0.2"); httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); httppost.setHeader("Host", "jifen.360.cn"); httppost.setHeader("Origin", "http://jifen.360.cn"); httppost.setHeader("Proxy-Connection", "keep-alive"); httppost.setHeader("Referer", "http://jifen.360.cn/safe?src=safe"); httppost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"); httppost.setHeader("X-Requested-With", "XMLHttpRequest"); try { //获取签到应答内容 response = httpclient.execute(httppost); HttpEntity httpEntity = response.getEntity(); String responseJsonStr = EntityUtils.toString(httpEntity); //请求示例 //{"errno":0,"errmsg":"","data":{"dayslen":1,"score":2,"signin_count":608904}} 成功 //{"errno":1,"errmsg":"u60a8u4ecau5929u5df2u7ecfu7b7eu8fc7u5230u4e86~","data":""} 失败 logger.info("Jifen360 请求签到链接 responseJsonStr:"+responseJsonStr); Map map = JSONObject.fromObject(responseJsonStr); int code=(Integer)map.get("errno"); if(0==code){ flag=true; logger.info("Jifen360 签到 成功!"); }else{ logger.info("Jifen360 今天已经签到了!"); } }catch (Exception e) { logger.error("Jifen360 signIn 请求签到链接 失败:"+e.toString()); return false; } finally { httppost.abort(); } return flag; } /** * 获取302跳转的 * * @return */ private String getRedirectLocation() { Header locationHeader = response.getFirstHeader("Location"); if (locationHeader == null) { return null; } return locationHeader.getValue(); } /** * 获取360 token * * @return */ private String getToken() { String redirectUrl = getRedirectLocation(); String token = ""; String responseBody = CustomerHttpClient.get(httpclient, redirectUrl); // System.out.println(responseBody); Pattern pattern1 = Pattern.compile("token":"(.*)","mall_tpl"); Matcher m1 = pattern1.matcher(responseBody); if (m1.find()) { token = m1.group(1); logger.info("Jifen360 360 token:"+token); } else { logger.error("Jifen360 360 获取360 token失败!"); } return token; } }