Java使用HTTPS登录网站代码实现

步骤一,获得网站的登录URL,及Form页元数据

这点可以通过Chrome的F12按键,检查登录时发送的数据包获得(【Preserve Log】建议打勾)。以登录京东网站为例,示范如下:

1,【Network】标签页,【Headers】项,可以查看登录URL

鼠标右键单击【Request URL】参数,选择【Copy Value】即可复制值。

Java使用HTTPS登录网站代码实现

2,【Network】标签页,【Payload】项,可以获取Form页元数据

同样地,鼠标右键单击各参数,选择【Copy Value】即可复制值。

Java使用HTTPS登录网站代码实现

步骤二,编写登录代码

package com.clzhang.sample.net;

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

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;

public class Login2JD {

    // 登录URL
    public static final String LOGIN_URL = "https://passport.jd.com/uc/loginService?uuid=a4bc68e0-2163-45e7-a60e-2bad2d90bb17<ype=logout&ReturnUrl=https://order.jd.com/center/list.action&r=0.5708092007940808&version=2015";

    @Test
    public void login() throws IOException {
        // 获取连接客户端工具
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 参数封装对象
        List params = new ArrayList();
        try {
            params.add(new BasicNameValuePair("uuid", "a4bc68e0-2163-45e7-a60e-2bad2d90bb17"));
            params.add(new BasicNameValuePair("eid",
                    "UGLYRKJMGDSAYCBIQEFQP4QZ3AKIUDCPLHPCY5BEFAL55RMV5XZ3S7RCPNXSWKDD6IEWOMV4EYTCGOFIKTBWIHD5BM"));
            params.add(new BasicNameValuePair("fp", "fb63ee37f64f02acb247dbbd015c066a"));
            params.add(new BasicNameValuePair("_t", "_t"));
            params.add(new BasicNameValuePair("loginType", "c"));
            params.add(new BasicNameValuePair("loginname", "13801022222"));
            params.add(new BasicNameValuePair("nloginpwd",
                    "fh/NyoAVnxRwqLRyZOdyehdjaldHfWmpPwioppQMhP2Z4AoBYhUklddJJuhLndlaMAvYF0Ijq6pI95r/JuqiKloPOfBnmA+Hu7kKW6zPv71MocU8sxI0syN+YhujdkNkl9kahpZjZw="));
            params.add(new BasicNameValuePair("authcode", "fcd912b70d024852a8ecb98e8db02019"));
            params.add(new BasicNameValuePair("pubKey",
                    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21TAIfT/vexbobzH7Q8SUdP5uDPXEBKzOjx2L28y7Xs1d9v3tdPfKI2LR7PAzWBmDMn8riHrDDNpUpJnlAGUqJG9ooPn8j7YNpcxCa1iybOlc2kEhmJn5uwoanQq+CA6agNkqly2H4j6wIDAQAB"));
            params.add(new BasicNameValuePair("sa_token",
                    "B68C442BE645754F33277E701208059080DD726A94A73F76DEC3053A838549C06EB7D3797CE1C5BBE7C2B2EF9CA7D467C3C76FF0A28885EE64B432120BA9B13D348C69B7D2A54084AD0AF9F604987E3FF4F05CFA833594DEAA638A1460132F8E4FC41F9984A0550F77FF3A51047D9FFA6937B2323ADE6CDB3A98776094AD46AFC0D104BE5A33FD4B2D219E65930F424CA62E9A76B0553DAFABE006ED3256B130266A76FAF5CCE3ADAB479A1B91EBE72C1A4BF98524844B1E83C710FCA76C98445A859CE2250B09F1F46964521C4584F34AA325E2CCB21063230D888A26FF50EA53E8585AC059B0167F5C76E28EC36A30964D34551EDD3242C4BDF09CB4B5A3CCBBF039E1998C8FC1525EF9FEDC38B0F16718EA67EA49BF24BF2FDDA53EEC8CCCB135E6BAF4D8445ECC4313595E9D5AC1E67CADD48C6334B8300DB8E65232CD1D04D9FDFE6B8416AB0E96556FC9C5128E6A83968900DFAD1DC70F8BE27D222C5AC6F5008B02D00D3A91E1F684EA8F8795CA3F94A60E91608C790FCC52A0DE0EBB4FDB7E3EE2611370D8A13471CC91D3740F35D400D7028ABFE18C1A1D918568CE6130E2830997AA1B8BEDAA754CC33ECABA5C41BB1340E6ABD924E215E2BFC0F19EC35C5B656DFE5E55B7B3858A3819151521D320A569E8945F10348A454AD34044EEE8E3E2FD7F7415F83F0187923BA39E51007B5E4180D131FA3F1CA307A0C2E6FAEAF56178E1147FC6DAD1B6770A616032701B391E17A308EDA2AE8CD969E8"));
            params.add(new BasicNameValuePair("seqSid", "215692539242879832"));
            params.add(new BasicNameValuePair("useSlideAuthCode", "1"));

            // 创建POST请求对象
            HttpPost httpPost = new HttpPost(LOGIN_URL);
            httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            httpPost.addHeader("User-Agent:",
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36");
            httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

            // 执行请求
            CloseableHttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            int code = response.getStatusLine().getStatusCode();
            System.out.println("StatusCode: " + code);
            String entityStr = EntityUtils.toString(entity, "UTF-8");
            System.out.println("返回结果: " + entityStr);

            response.close();
        } finally {
            // 释放资源
            if (httpClient != null) {
                httpClient.close();
            }
        }
    }
}

步骤三,引用相关包

修改pom.xml,加入如下内容:

        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.13version>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
            <version>3.4version>
        dependency>

         <dependency>
            <groupId>org.apache.httpcomponentsgroupId>
            <artifactId>httpclientartifactId>
            <version>4.5.2version>
        dependency>

        <dependency>
            <groupId>org.apache.httpcomponentsgroupId>
            <artifactId>httpmimeartifactId>
            <version>4.5.2version>
        dependency>

补充,如果是简单的HPPS网站登录,可以用如下方式

/**
     * 登录到网站的子程序,返回CloseableHttpClient
     * @return 登录成功,返回CloseableHttpClient对象
     * @throws Exception
     */
    private CloseableHttpClient login2JHL() throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 创建POST请求对象
        HttpPost httpPost = new HttpPost(LOGIN_URL);
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        httpPost.addHeader("User-Agent:",
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36");
        List params = new ArrayList();

        params.add(new BasicNameValuePair("username", "myuser1"));
        params.add(new BasicNameValuePair("password", "mypassword1"));

        // 使用URL实体转换工具
        UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(params, "UTF-8");
        httpPost.setEntity(entityParam);

        // 执行请求
        CloseableHttpResponse response = httpClient.execute(httpPost);

        // 获得响应的实体对象
//        HttpEntity entity = response.getEntity();
//        int code = response.getStatusLine().getStatusCode();
//        String entityStr = EntityUtils.toString(entity, "UTF-8");
//        System.out.println("StatusCode: " + code);
//        System.out.println("返回结果: " + entityStr);

        response.close();

        return httpClient;
    }

Original: https://www.cnblogs.com/nayitian/p/16269034.html
Author: 那些年的事儿
Title: Java使用HTTPS登录网站代码实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538431/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SSM-新注解

    Day5 Spring 新注解开发 原始注解对于非自定义的类无法进行注解进行配置,只能通过xml’文件配置 原始注解不能进行代替的配置又: 非自定义的Bean配置 加载…

    Java 2023年6月5日
    096
  • 《Effective Java 第三版》目录汇总

    经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习。时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正。 第三版全。下回再见,后会有期! Original:…

    Java 2023年5月29日
    092
  • SpringMVC

    [TOC] 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是…

    Java 2023年6月13日
    067
  • MinIO简介和java Api的使用

    MinIO是一个对象存储服务,非常轻量,也提供了多种语言的api,可以非常方便使用。 存储桶 minio中的bucket桶 MinIO将存储空间分为多个部分,称为bucket桶,文…

    Java 2023年6月6日
    088
  • 使用idea操作git(ssh协议)

    问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from rems…

    Java 2023年6月15日
    094
  • Java的三大特性

    Java的三大特性 封装: 隐藏内部功能的具体实现,只保留和外部交流数据的接口,将变化隔离,便于使用,提高复用性和安全性。例:汽车与发动机,不必知道发动机的实现原理,只需使用汽车给…

    Java 2023年6月13日
    067
  • Spring

    一、Spring SSH:Struct2 + Spring + Hibernate SSM:SpringMVC + Spring + MyBatis! 配置文件 org.sprin…

    Java 2023年6月8日
    085
  • 06、SpringBoot 启动 准备运行环境(prepareEnvironment)流程(三)

    目录:Springboot源码学习目录上文:05、SpringBoot 启动 准备运行环境(prepareEnvironment)流程(二)前言:终于把配置文件解析这一部分搞定了,…

    Java 2023年6月13日
    081
  • 子串次数——类似KMP

    老规矩 先来看问题 字符串a 在A中出现了多少次 求次数 。 当然有很多种算法 最简单的 一个一个找呗 不过这种太麻烦 我们不讲这种 我在写这个算法的时候 用到了KMP算法的部分内…

    Java 2023年6月5日
    068
  • 登陆认证框架:SpringSecurity

    最近想给自己的小系统搭建一个登录认证服务,最初是想着一套oauth2权鉴就可以,但是发现这个oauth2只是权鉴,具体的登录认证需要由 SpringSecurity来进行实现。也就…

    Java 2023年6月7日
    070
  • 程序员你是如何使用Nacos作为配置中心的?

    假如你使用的是spring-cloud-alibaba微服务技术栈 单个服务独有配置文件 即去除应用程序的状态,配置统一外部化管理,方便进行水平的伸缩。 集成步骤: 假如我有一个应…

    Java 2023年6月8日
    090
  • WWDC2016-session402-whatsNewInSwift3

    Dock 应用的介绍:1.设计到的东西多2.使用 swift 设计3.Dock 的代码量: 200,000行4.更少的重写相同功能的代码 swift.org 官网介绍 Swift …

    Java 2023年5月30日
    077
  • pyton对Quoted-printable进行编码和解码

    前言 利用的是python的 quopri模块进行操作 一.加密 import quopri str = "你好世界" a = quopri.encodestr…

    Java 2023年6月13日
    0102
  • java网络编程(UDP详解)

    UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从…

    Java 2023年6月8日
    074
  • 通过nginx 访问 centos 7 服务器上的.Net Core

    先安装依赖 yum -y install pcre-devel openssl openssl-devel yum -y install gcc gcc-c++ autoconf …

    Java 2023年5月30日
    096
  • Gateway

    简介 Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。 Gateway旨在…

    Java 2023年6月8日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球