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
获取登录需要的cookie简单案列
最新推荐文章于 2024-08-08 18:34:38 发布
这是一个Java程序,用于获取新浪微博登录所需的Cookie。它首先进行登录前的准备,如检查是否有可用的账号信息,然后通过预登录获取必要的参数,并使用这些参数进行登录过程,包括密码加密和POST请求。如果登录成功,会将Cookie保存为全局变量。
摘要由CSDN通过智能技术生成