凤凰山笔记

360每日自动签到

上一篇讲了每日自动登陆淘宝领取金币,这一篇讲讲如何登陆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;
    }

}
cloudroc wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
很惭愧,只做了些微小的工作,您的支持将鼓励我继续努力创作!