获取登录需要的cookie简单案列

package com.colasoft.wcs.cookie;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.S
摘要由CSDN通过智能技术生成
package com.cookie;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
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.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

/**
 * 新浪博客cookie
 */
@SuppressWarnings("deprecation")
public class SinaWeiboCookie {
	private static Log log = LogFactory.getLog(SinaWeiboCookie.class);
	private static HttpClient httpClient;
	private static HttpResponse response = null;
	private static String cookie = null;
	public static String currentUsername = null;
	private static String currentPassword = null;
	private static final String loginUrl = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)";

	/**
	 * 获取cookie
	 * 
	 * @Title: getCookie
	 * @Description: TODO
	 * @param @return
	 * @param @throws Exception
	 * @return String
	 * @throws
	 */
	public synchronized static String getCookie(HttpClient client)
			throws Exception {

		if (cookie != null) {
			return cookie;
		}

		httpClient = client;

		log.info("新浪微博正在登录中....");

		// 获取是否配置用户名
		if (!prepare()) {
			log.error("新浪微博没有可用的帐号信息,无法获取cookie!");
			return null;
		}

		// 预登录
		JSONObject preObject = preLogin();

		// 登录
		String cookie = login(preObject);

		// 返回cookie
		if (StringUtil.isNotEmpty(cookie)) {
			// 全局cookie
			setCookieGlobal(cookie);

			log.info("新浪微博登录成功! 已经获取到cookie。");
			return cookie;
		} else {
			log.error("新浪微博登录失败,无法获取到cookie!");
			return null;
		}
	}

	/**
	 * cookie设置为全局的
	 * 
	 * @Title: setCookieGlobal
	 * @Description: TODO
	 * @param @param c
	 * @return void
	 * @throws
	 */
	public static void setCookieGlobal(String c) {
		cookie = c;
	}

	/**
	 * 获取cookie前的准备工作
	 * 
	 * @Title: prepare
	 * @Description: TODO
	 * @param @param sina
	 * @param @param weibo
	 * @return void
	 * @throws
	 */
	private static boolean prepare() {

		LoginAccountBean loginAccount = WcsUtil.getLoginAccount(HostId.SINA,
				HostType.WEIBO);

		if (loginAccount != null) {
			currentUsername = loginAccount.getUsername();
			currentPassword = loginAccount.getPassword();
			log.info("切换到新浪微博账号,帐号名称为:"+currentUsername);
			return true;
		}
		return false;
	}

	/**
	 * 登录
	 * 
	 * @throws Exception
	 */
	public static String login(JSONObject obj) throws Exception {
		// 模拟请求
		HttpPost post = new HttpPost(loginUrl);
		List<BasicNameValuePair> formParams = new ArrayList<BasicNameValuePair>();
		formParams.add(new BasicNameValuePair("encoding", "UTF-8"));
		formParams.add(new BasicNameValuePair("entry", "weibo"));
		formParams.add(new BasicNameValuePair("from", ""));
		formParams.add(new BasicNameValuePair("gateway", "1"));
		formParams.add(new BasicNameValuePair("nonce", obj.getString("nonce")));
		formParams.add(new BasicNameValuePair("pagerefer", ""));
		formParams.add(new BasicNameValuePair("prelt", "186"));
		formParams.add(new BasicNameValuePair("pwencode", "rsa2"));
		formParams.add(new BasicNameValuePair("returntype", "META"));
		formParams.add(new BasicNameValuePair("rsakv", obj.getString("rsakv")));
		formParams.add(new BasicNameValuePair("savestate", "7"));
		formParams.add(new BasicNameValuePair("servertime", obj
				.getString("servertime")));
		formParams.add(new BasicNameValuePair("service", "miniblog"));

		formParams.add(new BasicNameValuePair("sr", "1920*1080"));
		formParams.add(new BasicNameValuePair("su",
				encodeUserName(currentUsername)));
		formParams
				.add(new BasicNameValuePair(
						"url",
						"http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"));
		formParams.add(new BasicNameValuePair("useticket", "1"));
		formParams.add(new BasicNameValuePair("vsnf", "1"));
		formParams.add(new BasicNameValuePair("wsseretry", "servertime_error"));

		// 获取加密密码
		String encode_password = encodePassword(obj.getString("servertime"),
				obj.getString("nonce"), obj.getString("pubkey"));

		// 如果密码为空则返回
		if (StringUtil.isEmpty(encode_password)) {
			return null;
		}
		formParams.add(new BasicNameValuePair("sp", encode_password));

		post.setEntity(new UrlEncodedFormEntity(formParams, "utf-8"));

		// 增加头信息
		post
				.setHeader("User-Agent",
						"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0");
		post
				.setHeader("Accept",
						"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		post
				.setHeader("Accept-Langu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值