java实现51cto网站的自动签到与获取下载积分等功能代码

需要3个jar包,网上自己下载即可:

1. commons-logging-1.1.1.jar

2. httpclient-4.2.5.jar

3. httpcore-4.3.2.jar

将字符串USER和PASSWD改成自己的用户名与密码,然后在eclipse运行即可

package cn.com.wanghy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class DailySign {
	public static final String URL_LOGIN = "http://home.51cto.com/index.php?s=/Index/doLogin";
	public static final String URL_SIGN = "http://home.51cto.com/index.php?s=/Home/toSign";
	public static final String URL_FREE_CREDITS = "http://down.51cto.com/download.php?do=getfreecredits&t="
			+ System.currentTimeMillis();

	/**
	 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 请修改成自己的用户名跟密码
	 */
	private static String USER = "用户名";
	private static String PASSWD = "密码";

	public static final DefaultHttpClient client = new DefaultHttpClient();

	public static void main(String[] args) throws Exception {
		// 创建登陆form
		UrlEncodedFormEntity formEntity = generateLoginFormEntity();
		// 创建登陆post请求
		HttpPost loginPost = new HttpPost(URL_LOGIN);
		loginPost.setEntity(formEntity);
		// 执行登陆请求
		HttpResponse loginResponse = client.execute(loginPost);
		// 处理登陆响应
		processResponse(loginResponse);
		// 登陆成功获取cookie
		String authStr = getCookieInfo();
		// 创建签到请求
		HttpGet signGet = new HttpGet(URL_SIGN + authStr);
		// 执行签到请求
		HttpResponse signResponse = client.execute(signGet);
		// 处理响应
		showResult(signResponse);
		// 创建领取下载豆请求
		HttpGet freeCreditsGet = new HttpGet(URL_FREE_CREDITS + authStr);
		// 执行领取下载豆请求
		HttpResponse freeCreditsResponse = client.execute(freeCreditsGet);
		// 处理响应
		showResult(freeCreditsResponse);
	}

	/**
	 * 创建登陆form
	 */
	private static UrlEncodedFormEntity generateLoginFormEntity()
			throws UnsupportedEncodingException {
		List<NameValuePair> formparams = new ArrayList<NameValuePair>();
		formparams.add(new BasicNameValuePair("email", USER));
		formparams.add(new BasicNameValuePair("passwd", PASSWD));
		UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formparams,
				"UTF-8");
		return formEntity;
	}

	/**
	 * 从cookie中获取SESSIONID,token等信息,从而保证下个请求能够通过登陆验证
	 */
	private static String getCookieInfo() {
		List<Cookie> cookies = client.getCookieStore().getCookies();
		String str = "";
		for (Cookie cookie : cookies) {
			str += "&" + cookie.getName() + "=" + cookie.getValue();
		}
		return str;
	}

	/**
	 * 处理登陆响应 登陆成功后,会经过一个过渡页面,这个页面或想其他的子站点发请求来告知是否通过登陆验证
	 *
	 */
	private static void processResponse(HttpResponse response)
			throws IllegalStateException, IOException {
		HttpEntity entity = response.getEntity();
		if (entity != null) {
			// 读取相应内容
			InputStream instream = entity.getContent();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					instream));
			String line = null;
			while ((line = reader.readLine()) != null) {
				line = new String(line.getBytes(), "UTF-8");
				int begin = line.indexOf("http://");
				int end = line.indexOf("\"></script>", begin);
				HttpGet get = null;
				// 截取子站点的网址并发送请求
				while (begin != -1) {
					String url = line.substring(begin, end);
					System.out.println(url);
					get = new HttpGet(url);
					response = client.execute(get);
					System.out
							.println(response.getStatusLine().getStatusCode());
					get.abort();
					line = line.substring(end);
					begin = line.indexOf("http://");
					end = line.indexOf("\"></script>", begin);
				}
			}
		}
		EntityUtils.consume(entity);
	}

	/**
	 * 读取相应内容并输出
	 */
	public static void showResult(HttpResponse response) throws IOException,
			UnsupportedEncodingException {
		int status = response.getStatusLine().getStatusCode();
		System.out.println(status);
		HttpEntity entity = response.getEntity();
		InputStream instream = null;
		if (entity != null) {
			instream = entity.getContent();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					instream));
			String line = null;
			while ((line = reader.readLine()) != null) {
				line = new String(line.getBytes(), "UTF-8");
				System.out.println(line);
			}
		}
		instream.close();
		EntityUtils.consume(entity);
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值