凤凰山笔记

just a diary


  • 首页

  • 归档

  • 标签
凤凰山笔记

360每日自动签到

发表于 2013-11-25 | 分类于 代码 , 技术宅 , 教程

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

}
凤凰山笔记

每日自动领取淘金币(java httpclient4)

发表于 2013-11-24 | 分类于 代码 , 技术宅 , 教程

从今天起,想连续写一个“自动签到”系列的博文,今天首先是每日自动领取淘宝金币的。

相信大家双十一大家都扫了不少货,我就买了个一zippo的打火机,呵呵~ 当时注意到原来淘金币可以抵钱啊,于是萌生了写一个每天定时领取淘金币程序的想法,最后使用httpclient4 解决了这个问题。

首先有这么几个头痛的问题,给大家分享一下:
1、必须使用淘宝账号来进行模拟登陆,如果是支付宝或者其他账号关联的就会出现验证码,这个就不好弄了
2、必须自己在机器上面手工登陆几天,然后点击签到领取淘金币,因为一开始领的时候总是有验证码,后来我联系手工领取了几天就没验证码了

话不多说,请感兴趣的童鞋看代码:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.cookie.Cookie;
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: Taobao
 * @Description: "一键淘"
 * @author kaedeen.com
 * @date 2013-11-13 下午1:19:28
 * 
 */
public class Taobao {

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

    private static String loginUrl = "https://login.taobao.com/member/login.jhtml";

    private static String tbToken = null;// 淘宝领金币使用的token

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

    private static HttpResponse response = null;

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

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

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

    /**
     * 登陆淘宝
     * 
     * @return
     * @throws IOException 
     * @throws ClientProtocolException 
     */
    public boolean login()  {

        if (null != httpclient) {
            return true;
        }

        httpclient = new DefaultHttpClient();
        // 设定cookie策略
        HttpClientParams.setCookiePolicy(httpclient.getParams(),
                CookiePolicy.BROWSER_COMPATIBILITY);
        // 登陆使用的表单数据
        List loginParams = new ArrayList();
        loginParams.add(new BasicNameValuePair("TPL_username", userName));
        loginParams.add(new BasicNameValuePair("TPL_password", passWord));

        //登陆post请求
        HttpPost loginPost = new HttpPost(loginUrl);
        loginPost.addHeader("Referer", loginUrl);
        loginPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
        loginPost.addHeader("User-Agent",
                        "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2; Tablet PC 2.0)");
        loginPost.addHeader("Host", "login.taobao.com");

        try {

            loginPost.setEntity(new UrlEncodedFormEntity(loginParams,  HTTP.UTF_8));

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

            if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
                String redirectUrl=getRedirectUrl();
                if(!"".equals(redirectUrl)){
                    //有重定向说明成功了,获取token
                    getTbToken(redirectUrl);
                }else{
                    logger.info("登陆请求出错,重定向失败!");
                    return false;
                }
            }else{
                logger.info("登陆请求出错,post返回状态:"+response.getStatusLine().getStatusCode());
                return false;
            }

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

        return true;
    }

    /**
     * 领取每日金币
     */
    @SuppressWarnings("rawtypes")
    public boolean getEveryDayCoins(){

        boolean flag=false;

        long t=System.currentTimeMillis();
        long enter_time=t-12345;

        String gainCoinUrl="http://vip.taobao.com/home/grant_everyday_coin.htm?t="+String.valueOf(t)
                +"&_tb_token_="+tbToken+"&checkCode=null" +
                "&enter_time="+String.valueOf(enter_time);

        HttpGet gainCoinGet1 =new HttpGet(gainCoinUrl);
        HttpResponse gainCoinResponse1;
        try {
            gainCoinResponse1 = httpclient.execute(gainCoinGet1);
            HttpEntity httpEntity = gainCoinResponse1.getEntity(); 
            String responseJsonStr = EntityUtils.toString(httpEntity);//取出应答字符串 
            //logger.info("领取金币应答字符串:"+responseJsonStr);
            Map map = JSONObject.fromObject(responseJsonStr);
            int code=(Integer)map.get("code");
            int daysTomorrow=(Integer)map.get("daysTomorrow");
            String coinTomorrow=(String) map.get("coinTomorrow");
            int coinNew=(Integer) map.get("coinNew");
            int coinOld=(Integer) map.get("coinOld");
            int coinGot=coinNew-coinOld;

            if(1==code){
                logger.info("成功领取"+coinGot+"个淘金币,已连领"+daysTomorrow+"天,当前金币数量"+coinNew+",明天可领"+coinTomorrow);
                flag=true;
            }else if(4==code){
                logger.info("哦? 需要输入验证码,领个淘金币还这么麻烦!");
            }else if(5==code){
                logger.info("验证码错误!");
            }else if(6==code){
                logger.info("这叫神马逻辑,有5个好友的用户才能天天领金币,当前淘金币数量"+coinNew);
            }else if(2==code){
                logger.info("今天运气不错,已经领了");
                flag=true;
            }else{
                logger.info("没见过这个code,问问淘宝客服?");
                flag=true;
            }

            //以防万一,再执行一次.....
            gainCoinResponse1 = httpclient.execute(gainCoinGet1);

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            gainCoinGet1.abort();
        }

        return flag;
    }

    /**
     * 获取淘宝重定向url
     * @return
     */
    private String getRedirectUrl(){
        String redirectUrl="";
        HttpEntity resEntity =  response.getEntity();
        try {
            String bufferPageHtml=EntityUtils.toString(resEntity, HTTP.UTF_8);
            Pattern pattern1 = Pattern.compile("window.location = "(.*)";");
            Matcher m1 = pattern1.matcher(bufferPageHtml);
            if (m1.find()) {
                redirectUrl=m1.group(1);
                logger.info("redirectUrl:"+redirectUrl);
            } else {
                logger.error("获取redirectUrl失败!");
            }
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return redirectUrl;
    }

    /**
     * 获取淘宝登陆令牌
     * 可以使用两种方式
     * 1.jsoup解析网页获取
     * 2.从httpclient对象的cookie中获取
     * @param redirectUrl
     */
    private void getTbToken(String redirectUrl){

        HttpGet itaobaoGet =new HttpGet(redirectUrl);
        try {
            httpclient.execute(itaobaoGet); 
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            itaobaoGet.abort();
        }

        CookieStore cookiestore=httpclient.getCookieStore();
        List cookies=cookiestore.getCookies();
            if (cookies.isEmpty()) {    
                logger.info("cookies is null!");    
            } else {    
                for (int i = 0; i < cookies.size(); i++) {
                    Cookie cookie=cookies.get(i);
                    //logger.info( cookies.get(i).toString());  
                    if(cookie.getName().equals("_tb_token_")){
                        tbToken=cookie.getValue();
                        logger.info("淘宝令牌:"+tbToken);
                    }
                }    
            }
    }

}

测试的main函数很简单,也附上:

Taobao taobao=new Taobao(userName,passWord);
        taobao.login();
        taobao.getEveryDayCoins();
凤凰山笔记

袁腾飞讲成吉思汗

发表于 2013-11-13 | 分类于 博客

上个月买了一本袁腾飞的新作《袁腾飞讲成吉思汗》,厚厚的一本,其实一共才300多页。大部分篇幅是在软件学院自习室里面边看美女边翻看的,后面的几章在百无聊赖中看完的。

为什么想买这本书,可能是因为想支持一下袁sir,也可能是看了他在youku视频里面讲辽国系列节目的影响,他讲耶律大石的那几集真的不错。

总体来说还是不错的,能客观评价成吉思汗,对成吉思汗持肯定态度,近乎是个高大全的世界第一人的形象了。

本书通篇就是视频演讲的文字版,很少有段子能引起我的共鸣。比起袁腾飞前些年在精华学校讲的那些差的很多。因为那个时候他什么都敢讲,虽然流露了很强的个人主观观点,但是我一直都很喜欢,那些视频陪伴我读过了很多寂寞无聊的夜晚,也一度是我的精神支柱。说起来那些视频也挺有意思的,最早我是在草X社区下载到他在精华学校讲课的全集……

袁腾飞的视频,罗永浩的mp3,枫姐的作品,都是那些年支撑着我度过苦逼日子不可缺少的东西。现在袁sir专心旅游和卖书,罗胖子一边卖萌一边买手机出手机系统,枫姐早早从良且远在岛国,但是你们的作品永远会在我的硬盘里面的。

凤凰山笔记

笛卡儿在方法论

发表于 2013-08-22 | 分类于 博客

笛卡儿在方法论中指出,研究问题的方法分四个步骤:
1.永远不接受任何我自己不清楚的真理,就是说要尽量避免鲁莽和偏见,只能是根据自己的判断非常清楚和确定,没有任何值得怀疑的地方的真理。就是说只要没有经过自己切身体会的问题,不管有什么权威的结论,都可以怀疑。这就是著名的“怀疑一切”理论。
2.可以将要研究的复杂问题,尽量分解为多个比较简单的小问题,一个一个地分开解决。
3.将这些小问题从简单到复杂排列,先从容易解决的问题着手。
4.将所有问题解决后,再综合起来检验,看是否完全,是否将问题彻底解决了。

凤凰山笔记

纸折玫瑰一朵

发表于 2013-08-06 | 分类于 啰B嗦 , 技术宅

好久不叠,底部没封好,比较像月季了。哈哈

 

凤凰山笔记

加班到这么晚,还忘记带钥匙,悲催……

发表于 2013-07-11 | 分类于 博客 , 啰B嗦

RT
非常悲催啊,还好被同事收留了,都急的差点给开锁公司打电话……明天再想办法
不过找到了一个 ORA-00603: ORACLE server session terminated by fatal error 的问题根源,
等彻底解决了再记录一下,算是今天做了一件有意义的事吧

1…181920…27
cloudroc

cloudroc

某种原因留言关闭,如有问题请微信发给我

158 日志
33 分类
115 标签
RSS
GitHub 知乎
Links
  • 开发者头条
  • 网址导航
  • 少侠请留步
  • ghostry
  • SuperMan
  • jack
  • 惶心
© 2013 - 2018 cloudroc
由 Hexo 强力驱动
Hosted by Coding Pages