`
阅读更多
//今天整理了一下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以内乘法口诀

    100×100乘法表和100以内的乘法口诀是数学学习的基础,对于初学者,特别是儿童来说,这是掌握基础运算技能的关键。乘法表是数学教育的重要工具,它包含了所有从1到100之间数字的乘积,帮助学生熟悉并快速记忆乘法...

    mfc100.dll msvcr100.dll

    在Windows操作系统中,`mfc100.dll`和`msvcr100.dll`是Microsoft Visual C++运行时库的重要组件,它们对于执行依赖于Visual C++ Redistributable Package的软件至关重要。这两个DLL(动态链接库)文件在很多基于VC++...

    微软面试100题系列之高清完整版PDF文档[带目录+标签]by_July

    ### 微软面试100题系列:涵盖的数据结构、算法与海量数据处理知识点解析 #### 一、概述 微软面试100题系列是由知名博主July创作的一套旨在帮助求职者准备技术面试的资源。该系列包含了11篇文章,总共300多道面试题...

    VT100 技术手册

    由于无法直接查看或分析图片内容,我只能根据标题、描述以及常见的VT100知识来构建知识点。VT100是一种终端设备,最初由DEC(数字设备公司)制造,广泛应用于1970年代至1980年代的计算机系统中。VT100是最早的终端之...

    493个ICO素材(100*100)

    标题提到的“493个ICO素材(100*100)”意味着这是一个包含493个大小为100像素乘以100像素的ICO图标文件的集合。 ICO文件的特点在于它能够同时包含多种尺寸和颜色深度的图像,以适应不同的显示需求。在Windows系统中...

    msvcr100d.dll(包括32位和64位两个版本)

    《msvcr100d.dll:理解和应用》 msvcr100d.dll是Microsoft Visual C++运行时库的一个动态链接库文件,它是Windows操作系统中不可或缺的一部分,特别是对于那些使用C++编译器开发的应用程序而言。...

    CMW100-基本操作手册

    CMW100 通信制造测试集用户手册 从给定的文件中,我们可以提取出以下知识点: 1. CMW100 通信制造测试集概述:CMW100 是一款通信制造测试集,由 Rohde & Schwarz 公司出品。它有多种变体,包括 variant K06 和 ...

    AEC-Q100中文版

    ### AEC-Q100中文版相关知识点 #### 一、概述 AEC-Q100中文版主要涉及集成电路在汽车电子领域的应用及其相应的应力测试认证标准。此文档旨在为汽车电子行业提供一套完整的测试规范,确保产品在各种恶劣环境下的...

    KF8A100EOG-ESD-DSD-DTD数据手册V1.1

    KF8A100EOG、KF8A100EOGD、KF8A100ESD、KF8A100DSD、KF8A100DTD 等型号是 KF8A100 微控制器的不同封装和技术参数的版本。这些型号之间的主要差异在于封装厚度和 FLASH 大小。 KF8A100EOG-ESD-DSD-DTD 数据手册 V1.1...

    XDS100V2使用手册

    XDS100V2是一款由Texas Instruments (TI)公司开发的仿真器,专门用于调试TI系列的微处理器和数字信号处理器(DSP)。XDS100V2仿真器是XDS100系列的第二代产品,这一系列仿真器支持JTAG仿真技术,可以在多种操作系统...

    MPRNet 去雨使用的测试数据集包括Rain100H,Rain100L,Test100

    首先,我们要了解MPRNet所用到的三个测试数据集:Rain100H、Rain100L和Test100。这些数据集是专门为了评估和训练去雨模型而设计的,它们包含了各种场景下的带雨图像,可以全面地测试模型的去雨能力。 1. Rain100H...

    TMP100温度传感器详细说明

    TMP100温度传感器详细说明 TMP100温度传感器是德州仪器(TI)公司的一款数字温度传感器,具有超低功耗、可编程分辨率、高速接口等特点。下面是TMP100温度传感器的详细说明: 一、工作电压范围:TMP100温度传感器的...

    xds100v3-1.1.7z

    《XDS100V3 & XDS100V2开发板原理图与PCB设计解析》 在电子工程领域,开发板是用于原型设计和测试的重要工具,XDS100V3和XDS100V2便是其中的两款知名产品。这些开发板主要用于调试Texas Instruments(TI)的C2000...

    xds100win7驱动程序

    《XDS100在Windows 7环境下驱动程序的安装与使用详解》 在数字信号处理(DSP)的开发过程中,调试工具起着至关重要的作用。XDS100是TI(Texas Instruments)公司推出的一款适用于TMS320C6000系列DSP的仿真器,它为...

    HI3861V100//LV100硬件资料

    《海思HI3861V100//LV100硬件资料详解》 海思,作为全球领先的半导体和集成电路设计公司,以其强大的研发能力和创新技术在业界享有盛誉。其中,HI3861V100/LV100是一款专为WiFi模组设计的高性能芯片,广泛应用于...

    CMW100指令手册、操作手册合集

    《CMW100无线通信测试系统:全方位指南》 CMW100是一款功能强大的无线通信测试系统,由领先的技术公司提供,旨在为研发、生产及质量保证环节提供全面的测试解决方案。这款设备支持多种无线通信标准,包括蓝牙、Wi-...

    cifar-100-python.zip

    CIFAR-100是计算机视觉领域一个广泛使用的数据集,主要由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2009年创建。这个数据集包含了100个类别的彩色图像,每个类别有6000张图片,其中5000张用于训练,1000张...

    华为模拟器Ensp-V100R003C00SPC100

    eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT...这是截至华为官方停止外部下载前收集的最新版本Ensp-V100R003C00SPC100,文件过大所以此文件为某度盘下载链接,建议有某度盘会员的下载

    XDS100V3,32位和64位

    标题中的“XDS100V3”是指Texas Instruments(TI)公司生产的XDS100系列调试器的第三版。这是一个硬件设备,主要用于嵌入式系统开发,特别是基于TI的C2000、C5000、C6000、ARM等处理器的开发板。XDS100V3提供了JTAG...

    XDS100V2驱动

    XDS100V2驱动是中国德州仪器(Texas Instruments, TI)为开发者提供的一款USB仿真器驱动,专门针对其数字信号处理器(DSP)的开发和调试。在嵌入式系统开发领域,XDS100V2是一款常用的硬件工具,它能够帮助开发者将程序...

Global site tag (gtag.js) - Google Analytics