个人实现的 java实现京东登录  花了好久才弄明白 分享下

jar:

jsoup-1.6.0.jar

httpcore-4.4.1.jar

httpclient-4.4.1.jar

commons-io-2.2.jar

commons-logging-1.2.jar

package com.hzq.service;import java.io.File;
import java.net.URI;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;import com.hzq.util.ReadProp;public class Login {private String url = "https://passport.jd.com/uc/login?ltype=logout";private String logInurl = "https://passport.jd.com/uc/loginService";private String showAuthCodeUrl = "https://passport.jd.com/uc/showAuthCode?r="+ Math.random() + "&version=2015";private String AuthImgSrc = "";private Map<String, String> paramMap=null;private static String LOGIN_NAME = "";private static String LOGIN_PSW = "";private static String AuthCodeImgPath = "";static {//读取配置文件  用户名 密码 验证码存储路径LOGIN_NAME = ReadProp.getInstance().Read("login", "LOGIN_NAME");LOGIN_PSW = ReadProp.getInstance().Read("login", "LOGIN_PSW");AuthCodeImgPath = ReadProp.getInstance().Read("login","AuthCodeImgPath");}public boolean doLogin() throws Exception {BasicCookieStore cookieStore = new BasicCookieStore();CloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();String rs = "";// 获取表单参数try {paramMap = new HashMap<>();HttpGet httpget = new HttpGet(url);CloseableHttpResponse response1 = httpclient.execute(httpget);try {HttpEntity entity = response1.getEntity();String content = EntityUtils.toString(entity);EntityUtils.consume(entity);Document doc = Jsoup.parse(content);paramMap = getMapfromDoc(doc);AuthImgSrc = getImgsrcFromDoc(doc);} finally {response1.close();}// 2显示验证码     TODO 有没有好像都一样
//          HttpUriRequest showAuthCode = RequestBuilder.post()
//                  .setUri(new URI(showAuthCodeUrl))
//                  .addParameter("loginName", LOGIN_NAME).build();
//          CloseableHttpResponse response2 = httpclient.execute(showAuthCode);
//          try {
//              HttpEntity entity = response2.getEntity();
//              EntityUtils.consume(entity);
//          } finally {
//              response2.close();
//          }// 3 获取验证码图片 并保存到指定路径RequestBuilder builder = RequestBuilder.get().setUri(new URI(AuthImgSrc + "&yys=" + new Date().getTime()));SetHeradersForAuthImg(builder);HttpUriRequest getAuthCode = builder.build();CloseableHttpResponse response3 = httpclient.execute(getAuthCode);try {HttpEntity entity = response3.getEntity();FileUtils.copyInputStreamToFile(entity.getContent(), new File(AuthCodeImgPath));EntityUtils.consume(entity);} finally {response3.close();}// 4 执行登录URI uri = new URI(logInurl + "?uuid=" + paramMap.get("uuid")+ "<ype=logout" + "&r=" + Math.random() + "&version=2015");RequestBuilder builder2 = RequestBuilder.post().setUri(uri);setHeadersForLogIn(builder2);System.out.println("输入验证码");Scanner in = new Scanner(System.in);String code = in.next();paramMap.put("authcode", code);//POST 参数for (Map.Entry<String, String> entry : paramMap.entrySet()) {builder2.addParameter(entry.getKey(), entry.getValue());}HttpUriRequest login = builder2.build();CloseableHttpResponse response4 = httpclient.execute(login);try {HttpEntity entity = response4.getEntity();rs = EntityUtils.toString(entity);EntityUtils.consume(entity);} finally {response4.close();}} finally {httpclient.close();}for(Cookie cookie:cookieStore.getCookies()){System.out.println(String.format("cookie键:%s,cookie值:%s,cookie路径:%s",cookie.getName(),cookie.getValue(),cookie.getPath()));}System.out.println(rs);if (rs.contains("emptyAuthcode")|| rs.contains("302")) {System.out.println("登录失败!!验证码有问题");} else {System.err.println("登录成功!!好爽啊  再登一次");return true;}return false;}public static Map<String, String> getMapfromDoc(Document doc) {Map<String, String> map = new HashMap<>();Elements e = doc.getElementsByTag("form");Elements ele = e.select("input");for (Element element : ele) {map.put(element.attr("name"), element.attr("value"));}map.put("loginname", LOGIN_NAME);map.put("loginpwd", LOGIN_PSW);map.put("nloginpwd", LOGIN_PSW);return map;}public static String getImgsrcFromDoc(Document doc) {Elements e = doc.getElementsByTag("img");for (Element element : e) {if (!"".equals(element.attr("src2")))return element.attr("src2");}return "";}/**登录的请求头**/public static void setHeadersForLogIn(RequestBuilder builder){builder.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");builder.setHeader("Accept-Encoding", "gzip, deflate, sdch");builder.setHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4");builder.setHeader("Connection", "keep-alive");builder.setHeader("Host", "passport.jd.com");builder.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36");}/**请求图片验证码的请求头**/public static void SetHeradersForAuthImg(RequestBuilder builder){builder.setHeader("Accept", "image/webp,*/*;q=0.8");builder.setHeader("Accept-Encoding", "gzip, deflate, sdch");builder.setHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4");builder.setHeader("Connection", "keep-alive");builder.setHeader("Host", "authcode.jd.com");builder.setHeader("Referer", "https://passport.jd.com/uc/login?ltype=logout");//必须。因为没弄这个浪费了很长时间builder.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36");}public static void main(String[] args) throws Exception {while (true) {if (new Login().doLogin()) {
//              System.exit(0);}Thread.sleep(500L);}}
}

Java实现京东登录相关推荐

  1. Java爬虫模拟登录——不给我毛概二的H某大学

    你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...

  2. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  3. java ee用户登录_EE Servlet 3:使用会话和过滤器开发用户登录

    java ee用户登录 我在上一篇文章中介绍了Application类,您可以在其中设置后端服务. 我添加的一个示例服务是UserService . 该服务将加载包含用户名和密码集的Java用户属性文 ...

  4. java用户的登录图片_Java 如何用 token 做用户登录认证

    1.什么是 token??? Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌. 2.token 做用户登录认证 ● 流程 3. Java 实现 ● 用户登录生成 token,保存到 ...

  5. java UCnter 单点登录 对接。

    java UCnter 单点登录 对接. 前提 PHP项目要部署成功.论坛能正常访问. 先配置 应用 1.是论坛应用 4.是java服务器,也就是你java登录的项目. 必须通信成功. .主应用IP就 ...

  6. Java 实现用户登录项目

    Java 实现用户登录项目 需求: 在页面中要求输入用户名和密码,并显示验证码.在三项都通过验证后显示登录成功否则登录失败 分析; 在验证用户名密码之前应该先判断验证码是否通过验证,防止多次连接数据库 ...

  7. 案例:京东登录页面css创建

    京东登录页面 效果图 一.整体html代码 <!DOCTYPE html> <html><head><meta charset="utf-8&quo ...

  8. Java Web实现登录注册(超详细附代码)

    Java Web实现登录注册(超详细附代码) 文章目录 Java Web实现登录注册(超详细附代码) 1.前言 2.登录注册设计流程 3.注册的数据流程 4.登录的数据流程 5.部分代码的展示 5.1 ...

  9. Java服务器验证登录系统

    Java服务器验证登录系统 代码全部由自己所写,作者是一名小白请多多包涵,如果代码有什么不好的地方大佬们可以指出问题 作者QQ:1391634154 单独写一个这样简易的登录是因为比较方便,由于我尝试 ...

最新文章

  1. 动手扩充FreeTextBox的功能
  2. Windows10下编译NCNN安卓NDK
  3. Android开源框架——事件总线 EventBus3.0讲解
  4. Delphi 能不能从Ring 3进入Ring 0
  5. 网络通信:单播、广播、组播
  6. 深入理解程序执行原理
  7. laravel 分词搜索匹配度_【地名地址】面向智慧城市的高精度地名地址匹配方法...
  8. ue默认高亮mysql_UE设置打开文件的默认高亮语言
  9. 电脑编程学习_零基础到底是否可以学习电脑编程?答案扎心了!
  10. Android 8.0 学习(14)---Android8.0适配分析
  11. 获取URL Schema
  12. gprs发送消息给服务器,gprs发送到云服务器
  13. 图论及其应用 2017年期末考试 答案总结
  14. AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)
  15. Verilog语言__Verilog简介及设计基础
  16. 解决印象笔记无法同步的问题
  17. Python表白妙招,把情书写进她的照片里
  18. TP框架增删改查需要掉ajax么6,TP6框架--EasyAdmin学习笔记:实现数据库增删查改
  19. 爬取起点网站图书信息(书名、作者、简介、图片url)
  20. MDM软件之SAP Afaria试用印象

热门文章

  1. 微软宣布Windows10即将迎来重大更新,Windows 11要来了?
  2. mixwit怀旧磁带音乐盒
  3. 使用BERT做中文文本相似度计算与文本分类
  4. flutter-拨打电话功能
  5. 网络营销中词条推广的价值和注意事项
  6. java/php/net/python“最终幻想14”游戏时装图鉴网站设计与制作
  7. 蜘蛛侠面具(头套制作)
  8. 怎么通过手机+电脑在互联网上面赚钱
  9. Jetson NX设置nvme固态硬盘为系统盘
  10. 局域网的主要特点是什么?为什么局域网采用广播通信方式而广域网不采用呢?