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

本文介绍如何利用Apache HttpClient实现淘宝登录并获取每日金币的过程,包括构造函数、登录方法、领取金币方法以及获取淘宝令牌等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载博客地址: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();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值