//今天整理了一下top的sessionkey的获取方法,上次在论坛看到一位高人写的,收录!
package com.carver.tool;
import java.net.URLEncoder;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.TextPage;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlImageInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
public class LoginUtil {
private static final String ONLINE_CONTAINER = "http://container.open.taobao.com/container?appkey=";
private static final Pattern P_SESSION = Pattern.compile("top\\_session=(\\w+?)&");
static {
Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.SEVERE);
Logger.getLogger("org.apache.commons.httpclient.HttpMethodBase").setLevel(Level.SEVERE);
}
public static void main(String[] args) throws Exception {
String session = getOnlineSession("app_key", "username", "password");
System.out.println("session_key: " + session);
}
public static String getOnlineSession(String appkey, String uid, String pwd) throws Exception {
String url = "http://member1.taobao.com/member/mini_login.htm?login_type=3&redirect_url=";
return getSession(url, ONLINE_CONTAINER, appkey, uid, pwd);
}
private static String getSession(String loginUrl, String topUrl, String appkey, String uid,
String pwd) throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
String fullUrl = loginUrl + URLEncoder.encode(topUrl + appkey, "utf-8");
HtmlPage loginPage = webClient.getPage(fullUrl);
HtmlForm loginForm = loginPage.getForms().get(0);
HtmlTextInput uidInput = loginForm.getInputByName("TPL_username");
uidInput.setValueAttribute(uid);
HtmlPasswordInput pwdInput = loginForm.getInputByName("TPL_password");
pwdInput.setValueAttribute(pwd);
HtmlButton loginButton = loginForm.getButtonByName("");
HtmlPage loginRsp = null;
try {
Page rsp = loginButton.click();
if (rsp instanceof HtmlPage) {
loginRsp = (HtmlPage) rsp;
} else if (rsp instanceof TextPage) {
TextPage textRsp = (TextPage) rsp;
return extractSession(textRsp.getContent());
} else {
return null;
}
} catch (FailingHttpStatusCodeException e) {
if (e.getStatusCode() == 404) {
return extractSession(e.getMessage());
}
} catch (Exception e) {
}
HtmlCheckBoxInput agreeCheck = (HtmlCheckBoxInput) loginRsp.getElementById("agreement");
if (agreeCheck == null) {
return extractSession(loginRsp.getWebResponse().getRequestSettings().getUrl().toString());
} else {
agreeCheck.click();
}
HtmlForm agreeForm = loginRsp.getForms().get(1);
List<HtmlElement> inputElements = agreeForm.getHtmlElementsByTagName("input");
HtmlImageInput agreeButton = null;
for (HtmlElement inputElement : inputElements) {
if (inputElement instanceof HtmlImageInput) {
agreeButton = (HtmlImageInput) inputElement;
break;
}
}
Page agreeRsp = null;
try {
agreeRsp = agreeButton.click();
} catch (FailingHttpStatusCodeException e) {
if (e.getStatusCode() == 404) {
return extractSession(e.getMessage());
}
} catch (Exception e) {
}
return extractSession(agreeRsp.getWebResponse().getRequestSettings().getUrl().toString());
}
private static String extractSession(String response) {
Matcher matcher = P_SESSION.matcher(response);
if (matcher.find()) {
return matcher.group(1);
} else {
return null;
}
}
}
分享到:
相关推荐
乘法是数学中的基础运算之一,而100×100乘法表和100以内的乘法口诀则是这一基础中的基石。它们不仅对于儿童来说是学习数学的重要工具,也是成人培养逻辑思维、提高计算能力不可或缺的训练材料。掌握这些内容,对于...
在Windows操作系统中,`mfc100.dll`和`msvcr100.dll`是Microsoft Visual C++运行时库的重要组件,它们对于执行依赖于Visual C++ Redistributable Package的软件至关重要。这两个DLL(动态链接库)文件在很多基于VC++...
### 微软面试100题系列:涵盖的数据结构、算法与海量数据处理知识点解析 #### 一、概述 微软面试100题系列是由知名博主July创作的一套旨在帮助求职者准备技术面试的资源。该系列包含了11篇文章,总共300多道面试题...
由于无法直接查看或分析图片内容,我只能根据标题、描述以及常见的VT100知识来构建知识点。VT100是一种终端设备,最初由DEC(数字设备公司)制造,广泛应用于1970年代至1980年代的计算机系统中。VT100是最早的终端之...
标题提到的“493个ICO素材(100*100)”意味着这是一个包含493个大小为100像素乘以100像素的ICO图标文件的集合。 ICO文件的特点在于它能够同时包含多种尺寸和颜色深度的图像,以适应不同的显示需求。在Windows系统中...
《msvcr100d.dll:理解和应用》 msvcr100d.dll是Microsoft Visual C++运行时库的一个动态链接库文件,它是Windows操作系统中不可或缺的一部分,特别是对于那些使用C++编译器开发的应用程序而言。...
CMW100 通信制造测试集用户手册 从给定的文件中,我们可以提取出以下知识点: 1. CMW100 通信制造测试集概述:CMW100 是一款通信制造测试集,由 Rohde & Schwarz 公司出品。它有多种变体,包括 variant K06 和 ...
msvcr100.dll 是与VS2010开发套件同步发行的运行时库文件,类似于VC2005、VC2008等库文件安装包,它也可以通过直接下载微软的VC2010库文件安装包来获得。 因为很多软件是用VS2010开发的,安装程序中会把它包含在内...
KF8A100EOG、KF8A100EOGD、KF8A100ESD、KF8A100DSD、KF8A100DTD 等型号是 KF8A100 微控制器的不同封装和技术参数的版本。这些型号之间的主要差异在于封装厚度和 FLASH 大小。 KF8A100EOG-ESD-DSD-DTD 数据手册 V1.1...
XDS100V2是一款由Texas Instruments (TI)公司开发的仿真器,专门用于调试TI系列的微处理器和数字信号处理器(DSP)。XDS100V2仿真器是XDS100系列的第二代产品,这一系列仿真器支持JTAG仿真技术,可以在多种操作系统...
TMP100温度传感器详细说明 TMP100温度传感器是德州仪器(TI)公司的一款数字温度传感器,具有超低功耗、可编程分辨率、高速接口等特点。下面是TMP100温度传感器的详细说明: 一、工作电压范围:TMP100温度传感器的...
《XDS100V3 & XDS100V2开发板原理图与PCB设计解析》 在电子工程领域,开发板是用于原型设计和测试的重要工具,XDS100V3和XDS100V2便是其中的两款知名产品。这些开发板主要用于调试Texas Instruments(TI)的C2000...
《XDS100在Windows 7环境下驱动程序的安装与使用详解》 在数字信号处理(DSP)的开发过程中,调试工具起着至关重要的作用。XDS100是TI(Texas Instruments)公司推出的一款适用于TMS320C6000系列DSP的仿真器,它为...
《海思HI3861V100//LV100硬件资料详解》 海思,作为全球领先的半导体和集成电路设计公司,以其强大的研发能力和创新技术在业界享有盛誉。其中,HI3861V100/LV100是一款专为WiFi模组设计的高性能芯片,广泛应用于...
《CMW100无线通信测试系统:全方位指南》 CMW100是一款功能强大的无线通信测试系统,由领先的技术公司提供,旨在为研发、生产及质量保证环节提供全面的测试解决方案。这款设备支持多种无线通信标准,包括蓝牙、Wi-...
eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT...这是截至华为官方停止外部下载前收集的最新版本Ensp-V100R003C00SPC100,文件过大所以此文件为某度盘下载链接,建议有某度盘会员的下载
CIFAR-100是计算机视觉领域一个广泛使用的数据集,主要由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2009年创建。这个数据集包含了100个类别的彩色图像,每个类别有6000张图片,其中5000张用于训练,1000张...
XDS100V2驱动是中国德州仪器(Texas Instruments, TI)为开发者提供的一款USB仿真器驱动,专门针对其数字信号处理器(DSP)的开发和调试。在嵌入式系统开发领域,XDS100V2是一款常用的硬件工具,它能够帮助开发者将程序...
标题中的“XDS100V3”是指Texas Instruments(TI)公司生产的XDS100系列调试器的第三版。这是一个硬件设备,主要用于嵌入式系统开发,特别是基于TI的C2000、C5000、C6000、ARM等处理器的开发板。XDS100V3提供了JTAG...