Java实现京东登录
个人实现的 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实现京东登录相关推荐
- Java爬虫模拟登录——不给我毛概二的H某大学
你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...
- java仿qq登录 界面设计,Java Swing仿QQ登录界面效果
本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...
- java ee用户登录_EE Servlet 3:使用会话和过滤器开发用户登录
java ee用户登录 我在上一篇文章中介绍了Application类,您可以在其中设置后端服务. 我添加的一个示例服务是UserService . 该服务将加载包含用户名和密码集的Java用户属性文 ...
- java用户的登录图片_Java 如何用 token 做用户登录认证
1.什么是 token??? Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌. 2.token 做用户登录认证 ● 流程 3. Java 实现 ● 用户登录生成 token,保存到 ...
- java UCnter 单点登录 对接。
java UCnter 单点登录 对接. 前提 PHP项目要部署成功.论坛能正常访问. 先配置 应用 1.是论坛应用 4.是java服务器,也就是你java登录的项目. 必须通信成功. .主应用IP就 ...
- Java 实现用户登录项目
Java 实现用户登录项目 需求: 在页面中要求输入用户名和密码,并显示验证码.在三项都通过验证后显示登录成功否则登录失败 分析; 在验证用户名密码之前应该先判断验证码是否通过验证,防止多次连接数据库 ...
- 案例:京东登录页面css创建
京东登录页面 效果图 一.整体html代码 <!DOCTYPE html> <html><head><meta charset="utf-8&quo ...
- Java Web实现登录注册(超详细附代码)
Java Web实现登录注册(超详细附代码) 文章目录 Java Web实现登录注册(超详细附代码) 1.前言 2.登录注册设计流程 3.注册的数据流程 4.登录的数据流程 5.部分代码的展示 5.1 ...
- Java服务器验证登录系统
Java服务器验证登录系统 代码全部由自己所写,作者是一名小白请多多包涵,如果代码有什么不好的地方大佬们可以指出问题 作者QQ:1391634154 单独写一个这样简易的登录是因为比较方便,由于我尝试 ...
最新文章
- 动手扩充FreeTextBox的功能
- Windows10下编译NCNN安卓NDK
- Android开源框架——事件总线 EventBus3.0讲解
- Delphi 能不能从Ring 3进入Ring 0
- 网络通信:单播、广播、组播
- 深入理解程序执行原理
- laravel 分词搜索匹配度_【地名地址】面向智慧城市的高精度地名地址匹配方法...
- ue默认高亮mysql_UE设置打开文件的默认高亮语言
- 电脑编程学习_零基础到底是否可以学习电脑编程?答案扎心了!
- Android 8.0 学习(14)---Android8.0适配分析
- 获取URL Schema
- gprs发送消息给服务器,gprs发送到云服务器
- 图论及其应用 2017年期末考试 答案总结
- AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)
- Verilog语言__Verilog简介及设计基础
- 解决印象笔记无法同步的问题
- Python表白妙招,把情书写进她的照片里
- TP框架增删改查需要掉ajax么6,TP6框架--EasyAdmin学习笔记:实现数据库增删查改
- 爬取起点网站图书信息(书名、作者、简介、图片url)
- MDM软件之SAP Afaria试用印象