凤凰山笔记

签到系列最终篇:2345每日自动签到领积分

提到http://www.2345.com/这个网址大家可能不会陌生,这是一家专门推广自己浏览器和软件的公司,同时也吸引了大量推广员以及电脑维修点帮他推广,安装他们的软件。

之前用python写过,2345自动签到,但是最近发现2345那帮人在登陆上做了手脚,每次都让你做个数学题,也就是验证码了,所以不能自动登陆了,也就没法签到了。

经过一下午的研究,当然是上个周末了…发现m.2345.com上面的登陆还是没有验证码的,而且会创建一个domain为*.2345.com的cookie,这样就能完成登陆啦,然后签到什么的都是浮云..嘿嘿

看代码:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;

/**
 * 
 * @ClassName: Jifen2345
 * @Description: 2345自动签到 由于2345把登陆页面都加上了数字验证,但是发现 m.2345.com
 *               仍然不需要验证码即可创建domain为*.2345.com的cookie 2013-11-19
 * @author kaedeen.com
 * @date 2013-11-19 下午9:00:08
 * 
 */
public class Jifen2345 {

    private static final Logger logger = Logger.getLogger(Jifen2345.class);

    private static DefaultHttpClient httpclient = null;// HttpClient对象

    private static HttpResponse response = null;

    private static String mloginUrl = "http://m.2345.com/index.php?c=login&a=ajaxLogin";// 手机登陆请求地址

    private static String checkinUrl = "http://jifen.2345.com/jifen/every_day_signature_new.php";// 签到请求地址

    private String userName = "";// 用户名

    private String passWord = "";// 密码明文

    /**
     * 构造函数
     * 
     * @param userName
     * @param passWord
     */
    public Jifen2345(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    /**
     * 登陆
     * 
     * @return
     */
    public boolean login(){

        boolean flag = false;

        httpclient = new DefaultHttpClient();
        // 设定cookie策略
        HttpClientParams.setCookiePolicy(httpclient.getParams(),CookiePolicy.BROWSER_COMPATIBILITY);

        List formparams =new ArrayList();
        formparams.add(new BasicNameValuePair("username", userName));
        formparams.add(new BasicNameValuePair("password", passWord));

        HttpPost httppost = new HttpPost(mloginUrl);
        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", "m.2345.com");
        httppost.setHeader("Origin", "http://m.2345.com");
        httppost.setHeader("Proxy-Connection", "keep-alive");
        httppost.setHeader("Referer", "http://m.2345.com/index.php?c=login");
        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");

        try {
            httppost.setEntity(new UrlEncodedFormEntity(formparams,  HTTP.UTF_8));

            //获取登陆应答内容
            response = httpclient.execute(httppost);

            if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
                int code=getLoginCode();
                if(0==code){
                    flag=true;
                }else{
                    logger.info(userName+"-用户名或密码有误!");
                }
            }else{
                logger.info(userName+"-2345登陆请求出错,post返回状态:"+response.getStatusLine().getStatusCode());
                return false;
            }

        }catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            httppost.abort();
        }

        return flag;
    }

    /**
     * 每日签到
     * @return
     */
    public boolean everyDaySignature(){

        boolean flag = false;

        HttpPost httppost = new HttpPost(checkinUrl); 
        httppost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
        httppost.addHeader("Host","jifen.2345.com");
        httppost.addHeader("Referer","http://jifen.2345.com/index.php");

        try {

            //获取登陆应答内容
            response = httpclient.execute(httppost);

            if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
                HttpEntity httpEntity = response.getEntity(); 
                String responseStr = EntityUtils.toString(httpEntity);
                //logger.info(userName+"-签到请求返回:"+responseStr);
                if(responseStr.startsWith("succ")){
                    flag=true;
                    logger.info(userName+"-签到成功!:"+responseStr);
                }
            }else{
                logger.info(userName+"-2345签到请求出错,post返回状态:"+response.getStatusLine().getStatusCode());
                return false;
            }

        }catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            httppost.abort();
        }

        return flag;

    }

    /*返回字符串
    * {"code":0,"msg":"u7528u6237u540du6216u5bc6u7801u4e0du5bf9"}
    */
    private int getLoginCode(){

        int code=2;
        HttpEntity httpEntity = response.getEntity(); 
        String responseJsonStr = "";
        try {
            responseJsonStr = EntityUtils.toString(httpEntity);
            //logger.info("responseJsonStr---"+responseJsonStr);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//取出应答字符串 

        Map map = JSONObject.fromObject(responseJsonStr);

        code=(Integer) map.get("code");

        logger.info(userName+"-捕获登陆返回code:"+code);

        return code;
    }

}

一点点牢骚:
其实去年就写了2345自动签到的程序,也挂在sae上面签到了一年了吧,因为自己不装机也不坑害别人装他们的浏览器或者软件,只是靠签到,所以一直收入甚微,到现在估计折合软妹币也就49元左右的样子…

话说回来,写这些签到模拟登陆的程序都是个人兴趣,不指望用来赚钱,自己也真心不会赚钱,google adsense都“莫名其妙”被封了,所以基本没啥额外收入了。

大家看代码时候有啥问题,请您留言,我看到会解答。如果伸手要直接可运行程序什么什么的,那个只能给好朋友,所有代码都在这里你都不想研究,我也帮不上你…

我会把代码尽快放到github或者其他上面,敬请关注。

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