`
jie_bosshr
  • 浏览: 141956 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java模拟淘宝网领取淘宝币--转载

阅读更多
转载博客地址:http://www.oschina.net/code/snippet_872419_26714
需要httpclient-4.1.3.jar和httpcore-4.1.4.jar以及json依赖包
package com.hmkcode;
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;
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<namevaluepair> loginParams = new ArrayList<namevaluepair>();
		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<cookie> 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);
	                }
	            }    
	        }
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Taobao taobao=new Taobao("用户名","密码");
		taobao.login();
		taobao.getEveryDayCoins();
	}

}
分享到:
评论
1 楼 qwe123asf 2015-11-22  
楼主的代码貌似不行哎,登陆就出现错误了,请问是否有可以模拟登陆的代码共享下?

相关推荐

    仿淘宝-仿淘宝平台-仿淘宝平台源码-仿淘宝平台java代码-基于Web的仿淘宝平台设计与实现-仿淘宝平台设计与实现-java代码

    仿淘宝-仿淘宝平台-仿淘宝平台源码-仿淘宝平台java代码-仿淘宝平台设计与实现-基于springboot的仿淘宝平台-基于Web的仿淘宝平台设计与实现-仿淘宝网站-仿淘宝网站源码-仿淘宝网站java代码-仿淘宝项目-仿淘宝项目代码...

    taobao-sdk-java-auto.zip

    最新官方淘宝服务端SDK,5月18日更新,包含taobao-sdk-java.jar和taobao-sdk-java-source.jar两个文件,供大家下载研究。 maven安装命令:mvn install:install-file -Dfile=路径\xxx.jar -DgroupId=dingtalk-sdk-...

    java 游戏源码-----模拟钢琴

    "Java 游戏源码-----模拟钢琴"是一个项目,它提供了一种独特的学习体验,让你能够深入理解如何使用Java语言来创建互动性的游戏应用。这个源码实现了一个模拟钢琴,允许用户在虚拟键盘上弹奏音乐,体验接近真实钢琴的...

    java模拟微信浏览器访问.rar

    在Java编程中,模拟微信浏览器访问Web页面是一个常见的需求,特别是在自动化测试、数据抓取或者模拟用户行为的场景。这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们...

    淘宝SDK(java)

    3. **taobao-sdk-java-online_standard-20140408.jar**:这是主SDK的jar文件,包含了所有必要的类和方法,供开发者在项目中引入并使用。开发者将此文件添加到项目的类路径中,就可以开始调用淘宝API了。 4. **...

    java模拟淘宝登录源码

    Java模拟淘宝登录源码是一种常见的网络爬虫技术,主要用于自动化执行网页登录操作,例如在进行数据分析或自动化测试时。在这个场景中,我们使用了Apache HttpClient库,它是一个强大的HTTP客户端API,可以处理HTTP...

    pc端仿淘宝-pc端仿淘宝系统-pc端仿淘宝系统源码-pc端仿淘宝管理系统-基于springboot的pc端仿淘宝系统-java

    pc端仿淘宝-pc端仿淘宝系统-pc端仿淘宝系统源码-pc端仿淘宝管理系统-pc端仿淘宝管理系统java代码-pc端仿淘宝系统设计与实现-基于springboot的pc端仿淘宝系统-基于Web的pc端仿淘宝系统设计与实现-pc端仿淘宝网站-pc端...

    java 模拟登录(含验证码)

    本文将详细介绍如何使用Java进行模拟登录,特别是结合OCR技术处理验证码。 首先,让我们了解什么是模拟登录。模拟登录是指通过编程方式自动登录到一个网站,通常是通过发送HTTP请求,模拟用户填写表单并提交的过程...

    JAVA基本考核-模拟题

    JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本考核-模拟题JAVA基本...

    Java模拟实现百度文档在线浏览-源码

    本资源“Java模拟实现百度文档在线浏览-源码”提供了一个独特的学习机会,让我们能够了解如何利用Java技术来模拟实现类似百度文库的在线文档预览功能。这个项目不仅对Java开发者有益,也为那些想要深入理解在线文档...

    java 模拟淘宝购物买卖双方交易问题

    在Java编程中,模拟淘宝购物买卖双方的交易过程是一个典型的对象导向设计问题,涉及到许多核心概念,如类、对象、接口、并发控制等。以下将详细介绍这个过程中涉及的知识点。 1. 类与对象:首先,我们需要创建代表...

    学生竞赛模拟-学生竞赛模拟系统-学生竞赛模拟系统源码-学生竞赛模拟管理系统-基于Web的学生竞赛模拟系统设计与实现-java代码

    学生竞赛模拟-学生竞赛模拟系统-学生竞赛模拟系统源码-学生竞赛模拟管理系统-学生竞赛模拟管理系统java代码-学生竞赛模拟系统设计与实现-基于ssm的学生竞赛模拟系统-基于Web的学生竞赛模拟系统设计与实现-学生竞赛...

    taobao-sdk-java-auto-1.0.jar

    taobao-sdk-java-auto-1.0.jar,

    java模拟发送form-data的请求方式

    Java 模拟发送 Form-Data 的请求方式 Java 模拟发送 Form-Data 的请求方式是指在 Java 语言中模拟浏览器发送 Form-Data 格式的 HTTP 请求的方法。Form-Data 是一种常见的 HTTP 请求体格式,广泛应用于文件上传、...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    mysql-connector-java-5.1.42-bin.jar 官网驱动下载

    mysql-connector-java-5.1.42-bin.jar 官网下载的驱动

    mysql-connector-java-5.1.47 jar包

    `mysql-connector-java-5.1.47.jar`是这个驱动程序的特定版本,发布于MySQL的5.1系列,它提供了与MySQL 5.1数据库版本兼容的连接功能。 **JDBC(Java Database Connectivity)** JDBC是Java平台上的标准API,由Sun ...

    使用Java自动化方法模拟Android人工点击、触屏事件(含platform-tools工具)

    本篇文章将深入探讨如何使用Java自动化方法模拟Android的人工点击和触屏事件,同时涉及`platform-tools`工具包中的adb(Android Debug Bridge)。 首先,`platform-tools`是Android SDK的一部分,包含了adb工具,这...

    Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法

    本次试验是使用程序来模拟操作系统中进程调度的三种不同的调度策略,分别为最短作业...SJF.java是模拟实现最短作业优先的调度策略。 RR.java是模拟实现时间片轮转的调度策略。 HRRN.java是模拟最高响应比的调度策略。

    taobao-sdk-java-auto_1502853394064-20190506.jar

    淘宝客sdk用于开发,需要的朋友可以下载使用,接口开发

Global site tag (gtag.js) - Google Analytics