`
jie_bosshr
  • 浏览: 143554 次
  • 性别: 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模拟淘宝登录源码

    在本文中,我们将深入探讨如何使用Java的HTTPClient库来模拟淘宝网的登录过程。这个过程涉及到了网络请求、HTTP协议、Cookie管理以及可能的HTML解析等技术。首先,我们来了解一下HTTPClient库。 HTTPClient是Java...

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

    "Java 游戏源码-----模拟钢琴"是一个项目,它提供了一种独特的学习体验,让你能够深入理解如何使用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模拟微信浏览器访问.rar

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

    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开发者有益,也为那些想要深入理解在线文档...

    淘宝标准SDK(java)

    淘宝标准SDK(java),使用其与淘宝平台沟通,获取用户信息,商品信息等。

    java网上购物结算模拟(介绍了软件的应用)

    【Java网上购物结算模拟】课程设计是一次深入学习和实践Java编程语言的重要活动,旨在让学生掌握Java语言的核心概念和面向对象编程的特性。通过这次设计,学生不仅能巩固基础语法,还能提升使用JDK和开发工具(如...

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

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

    最新的sdk-java淘宝开放平台

    最新的淘宝开放平台sdkjar包,因为淘宝联盟有很多接口需要申请才能下载jar包,这里提供一个自己生成比较全的SDK

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

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

    javacv-platform-1.3-bin.zip

    JavaCV(Java Computer Vision)是一个开源的计算机视觉库,它为Java和Android提供了对各种流行的计算机视觉库的访问,如OpenCV、FFmpeg、Face_recognition等。在本例中,我们关注的是`javacv-platform-1.3-bin.zip`...

    taobao-sdk-java

    而"taobao-sdk-java-online_standard-20140609-source.jar"则是该版本SDK的源代码包,开发者可以通过查看源代码来了解内部实现细节,学习如何使用API,或者在遇到问题时进行调试。源代码的提供对于开发者来说非常有...

    java模拟https基本jar包

    java用于模拟https需要的jar包 包含commons-lang-2.6.jar、httpclient-4.3.2.jar、httpcore-4.3.jar、commons-io-2.4.jar、httpmime-4.3.1.jar、httpclient-cache-4.3.1.jar

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 详细流程图文说明请看: http://blog.sina.com.cn/s/blog_533587770101iz4f.html 解决问题: a.Java模拟QQ空间登录,获取Cookie b.Java的QQ空间请求的G_TK...

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

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

    selenium-java-2.44.0、selenium-java-2.44.0-srcs、selenium-server-standalone-2.44.0

    首先,我们来了解一下 `selenium-java-2.44.0.jar`。这是一个预编译的Java库,其中包含了Selenium WebDriver的Java绑定。WebDriver是Selenium的一个核心部分,它提供了一个编程接口,允许测试脚本直接控制浏览器。...

    基于java的开发源码-电梯模拟程序 v2.0.zip

    基于java的开发源码-电梯模拟程序 v2.0.zip 基于java的开发源码-电梯模拟程序 v2.0.zip 基于java的开发源码-电梯模拟程序 v2.0.zip 基于java的开发源码-电梯模拟程序 v2.0.zip 基于java的开发源码-电梯模拟程序 v2.0...

Global site tag (gtag.js) - Google Analytics