java 京东登录
package org.rx.service.media; import io.netty.channel.Channel;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponse;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.rx.core.util.ImageUtil;
import org.rx.bot.util.AwtBot;
import org.rx.common.Disposable;
import org.rx.common.InvalidOperationException;
import org.rx.socks.http.HttpClient;
import org.rx.socks.proxyee.intercept.HttpProxyIntercept;
import org.rx.socks.proxyee.intercept.HttpProxyInterceptInitializer;
import org.rx.socks.proxyee.intercept.HttpProxyInterceptPipeline;
import org.rx.socks.proxyee.server.HttpProxyServer;
import org.rx.socks.proxyee.server.HttpProxyServerConfig;
import org.rx.util.ManualResetEvent; import java.awt.*;
import java.awt.image.BufferedImage; import static org.rx.util.AsyncTask.TaskFactory; /**
* helper = new JdLoginBot(config.getJd().getLoginPort());
* while (caller.getCurrentUrl().equals(loginUrl)) {
* try {
* String key = helper.produceKey();
* log.info("produce key {}", key);
* caller.navigateUrl(key, BodySelector);
* log.info("consume key {}", caller.getCurrentUrl());
*
* Thread.sleep(2000);
* } catch (Exception e) {
* log.error("login", e);
* }
* }
*/
@Deprecated
@Slf4j
public final class JdLoginBot extends Disposable {
private static final BufferedImage jdKey; static {
Class owner = JdLoginBot.class;
jdKey = ImageUtil.getImageFromResource(owner, "/bot/jdKey.png");
} private String loginKey;
private ManualResetEvent waiter;
private AwtBot bot;
private Point lastPoint;
private HttpProxyServer proxyServer; public JdLoginBot(int port) {
waiter = new ManualResetEvent();
bot = AwtBot.getBot();
TaskFactory.run(() -> listen(port));
} @Override
protected void freeObjects() {
proxyServer.close();
} private void listen(int port) {
HttpProxyServerConfig config = new HttpProxyServerConfig();
config.setHandleSsl(true);
proxyServer = new HttpProxyServer().serverConfig(config)
.proxyInterceptInitializer(new HttpProxyInterceptInitializer() {
@Override
public void init(HttpProxyInterceptPipeline pipeline) {
pipeline.addLast(new HttpProxyIntercept() {
@Override
public void beforeRequest(Channel clientChannel, HttpRequest httpRequest, HttpProxyInterceptPipeline pipeline) throws Exception {
String host = httpRequest.headers().get(HttpHeaderNames.HOST);
String s = httpRequest.headers().get(HttpHeaderNames.COOKIE);
System.out.println("[rxcookie]: " + s);
if (host != null) {
String url;
if (httpRequest.uri().indexOf("/") == 0) {
if (httpRequest.uri().length() > 1) {
url = host + httpRequest.uri();
} else {
url = host;
}
} else {
url = httpRequest.uri();
}
log.info("Request: {}", url);
if (url.startsWith("passport.jd.com/uc/nplogin?")) {
log.info("JdLoginBot detect {}", url);
loginKey = "http://" + url;
waiter.set();
Thread.sleep(3000);
clientChannel.close();
return;
}
} httpRequest.headers().set(HttpHeaderNames.USER_AGENT, HttpClient.IE_UserAgent);
pipeline.beforeRequest(clientChannel, httpRequest);
} @Override
public void afterResponse(Channel clientChannel, Channel proxyChannel, HttpResponse httpResponse, HttpProxyInterceptPipeline pipeline) throws Exception {
httpResponse.headers().add("intercept", "rxProxy");
pipeline.afterResponse(clientChannel, proxyChannel, httpResponse);
}
});
}
});
proxyServer.start(port);
} @SneakyThrows
public synchronized String produceKey() {
try {
lastPoint = bot.clickByImage(jdKey);
log.info("step1 clickByImage ok");
} catch (InvalidOperationException e) {
if (lastPoint != null) {
bot.mouseLeftClick(lastPoint);
log.info("step1 retry clickByImage {} ok", lastPoint);
} else {
throw e;
}
} waiter.waitOne(6 * 1000);
waiter.reset();
log.info("step2 wait proxy callback"); try {
log.info("step2 get key {}", loginKey);
if (loginKey == null) {
throw new InvalidOperationException("produce empty key");
}
return loginKey;
} finally {
loginKey = null;
TaskFactory.scheduleOnce(() -> {
log.info("step3 try close it");
// bot.saveScreen();
int y = (int) bot.getScreenRectangle().getHeight();
bot.clickAndAltF4(218, y - 20);
log.info("step3 closed it");
}, 2 * 1000);
}
}
}
java 京东登录的更多相关文章
- Java模拟登录系统抓取内容【转载】
没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下.... 为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...
- java web登录界面 源代码
大概流程: 在java web项目中 导入sqljdbc4的包 在java Resources中完成java代码 在webContent 下建立一个存放自己写jsp的文件夹 将sqljdbc4和jst ...
- 【转】 我的java web登录RSA加密
[转] 我的java web登录RSA加密 之前一直没关注过web应用登录密码加密的问题,这两天用appscan扫描应用,最严重的问题就是这个了,提示我明文发送密码.这个的确很不安全,以前也大概想过, ...
- python+selenium模拟京东登录后台
python+selenium模拟京东登录后台 import json from time import sleep from selenium import webdriver #from sele ...
- C#实现京东登录密码加密POST
1.京东登录登录密码 function getEntryptPwd(pwd) { var pubKey = $('#pubKey').val(); if (!pwd || !pubKey || !Sy ...
- java京东自动登录
大部分代码都是参考的这边,我只是在他的逻辑上实现了自动通过验证码,放上主逻辑的代码吧,图片识别我用的若快,可以去接其他平台 https://blog.csdn.net/u013232789/artic ...
- java 自动登录代码
javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Serial ...
- Java 简单登录MVC
构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是 ...
- HTTPClient实现java自动登录人人网
参考网址: https://passport.csdn.net/account/login http://www.iteye.com/topic/638206 httpClient http://b ...
随机推荐
- Transform.Find()
代码演示: using System.Collections;using System.Collections.Generic;using UnityEngine; public class Tran ...
- Gitblit用户没有push权限,但是已经在team里面配置了
问题: 用户已经移动到team里面,team有对应repository的push权限. does not have push permissions for 解决方案: 发现这个用户以前单独配置了这个 ...
- Linux-文件系统概述
主要对外部存储设备: 分区与格式化原理: IDE: /dev/hda 第一块硬盘 ……/dev/hdn /dev/hda1 第一块硬盘的第一个分区 第n块IDE硬盘 SCSI:/de/sda ...
- write(byte[] b, int off, int len)
write(byte[] b, int off, int len)就是将数组 b 中的 len 个字节按顺序写入输出流. 所以如果 b 为 null,则抛出 NullPointerException. ...
- 【软件安装】——Robot Framework
Robot Framework安装(win10) 一. 安装python 1.安装python2.7到本地,双击安装包进行安装,一般放入D盘,文件名默认Python27: 安装完成后进行版本检验,调出 ...
- 爬取拉勾网python工程师的岗位信息并生成csv文件
转载自:https://www.cnblogs.com/sui776265233/p/11146969.html 代码写得很好,但是目前只看得懂前一部分 一.爬取和分析相关依赖包 Python版本: ...
- equals方法重写
在java中常见的equals方法的重写: 举例:一个自定义类ball如下 public class Ball { private String name; private int weight; p ...
- 第五节 RabbitMQ在C#端的应用-消息收发
原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...
- iview 分割面板效果(二)
源码地址:https://gitee.com/yolanda624/coffer/tree/master/src/components/a-split-panel
- mybatis 自定义查询语句
通过mybatis插件生成的mapper文件只有基本的增.删.改.查.汇总.但是实际使用场景中,总是有各种需要连表.汇总.分组查询的需求,那我们一般都通过自定义查询语句去实现. 有时候会有表结构更改的 ...