惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
The GitHub Blog
The GitHub Blog
美团技术团队
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
Attack and Defense Labs
Attack and Defense Labs
G
Google Developers Blog
I
InfoQ
博客园 - 司徒正美
T
Troy Hunt's Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
S
Security Affairs
M
MIT News - Artificial intelligence
Simon Willison's Weblog
Simon Willison's Weblog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tailwind CSS Blog
量子位
Vercel News
Vercel News
月光博客
月光博客
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
F
Full Disclosure
The Hacker News
The Hacker News
Hacker News: Ask HN
Hacker News: Ask HN
T
Tor Project blog
A
Arctic Wolf
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
GbyAI
GbyAI
B
Blog RSS Feed
V
Visual Studio Blog
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs

犀利豆的博客

《SRE google 运维解密》读书笔记 (六) 《SRE google 运维解密》读书笔记 (五) 《SRE google 运维解密》读书笔记 (四) 《SRE google 运维解密》读书笔记 (三) 《SRE google 运维解密》读书笔记 (二) 《SRE google 运维解密》读书笔记 (一) 2021 总结 终于有一个 Java 可以用的微信机器人了 Vertx入门到实战—实现钉钉机器人内网穿透代理 周末补习(一)trie 树 那些有趣的代码(三)--勤俭持家的 ArrayList 那些有趣的代码(二)--偏不听父母话的 Tomcat 类加载器 那些有趣的代码(一)--有点萌的 Tomcat 的线程池 从需求第三定律说起--为什么知乎的回答质量下降了 如何利用 Spring Hibernate 高级特性设计实现一个权限系统 居然有人能忘记吃饭?写个微信机器人提醒他 我的2018年总结 从 LongAdder 中窥见并发组件的设计思路 徒手撸框架--实现 RPC 远程调用 我的写作工具链 Java 渲染 docx 文件,并生成 pdf 加水印 撸码的福音--变量名生成器的实现 Raft 协议学习笔记 dubbo 源码学习(一)开篇 Redis 命令的执行过程 Redis 中的事件驱动模型 Redis 数据库、键过期的实现 Redis 的基础数据结构(三)对象 Redis 的基础数据结构(二) 整数集合、跳跃表、压缩列表 Redis 的基础数据结构(一) 可变字符串、链表、字典 线程池 execute() 的工作逻辑 JAVA 中的 CAS 徒手撸框架--高并发环境下的请求合并 徒手撸框架--实现Aop 徒手撸框架--实现IoC 2017个人总结 最近遇到的几个问题集合 Redis RedLock 完美的分布式锁么? JAVA 8入门(二)流 JAVA 8入门(一)Lambda表达式 有道 Alfred Workflow 威力加强版 Kafka实现原理笔记 《交易系统:更新与跨越》读后笔记 Netty-Apns接入实现 Future研究 Hystrix入门研究 Redis实现分布式锁
钉钉机器人回调内网穿透代理--使用篇
Zhengxin Diao · 2020-03-26 · via 犀利豆的博客

“山川异域,风月同钉”,被钉钉暴打的你,是不是已经想写一个机器人调戏一下钉钉了。在写机器人的时候,钉钉机器人的回调需要填写一个公网 http 地址。

这还没开发机器人,就没有 http 服务,没有 http 服务就收不到钉钉的回调,没有回调就不能调试机器人。不能调试机器人,就不能上线。

black

又一次陷入了被钉钉暴打的死循环,办法总比问题多,所以为了解决这个问题。我们就需要一个公网代理。所以我们就来撸一个。

这里注意一下,由于一般开发人员都处在内网环境。要想让代理做内网穿透,技术比较复杂。所以我们就换个思路。我们可以利用 Websocket 的双工的特性。接入代理,当代理收到钉钉的回调的时候,把消息推到我们本地开发环境。提升我们开发的效率。见下图:

dingproxy.jpg

使用方法

1
2
3
4
5
6
git clone https://github.com/diaozxin007/DingTalkProxy
cd DingProxyServer
./gradlew build
java -jar build/libs/dingWs-all.jar

nohup java -jar build/libs/dingWs-1.0.0-all.jar &>> nohup.out & tailf nohup.out

可以修改 resources 下的 server.properties

1
2
3
4
# 监听端口
server.port=8080
# 钉钉回调的 uri
server.api=/ding/api

然后重新运行:

1
./gradlew build

这个时候,proxy 已经开始正常运行了。

如果只是想看看一看钉钉回调的报文,那就可以直接使用 [websock-test] (http://www.websocket-test.com/) GUI 调试工具。

如果想在代码里面使用可以参考 DingProxyClinet 里面的代码。

注意事项

Q:1、为什么我连不上服务?

A:确认服务是否只开启了 https,如果开启了 https, 需要把协议头修改为 wss。

Q:2、我还是连不上?

A:需要确认 nginx 的配置,是否支持 WebSocket。

可以在 nginx 的配置中增加

1
2
3
4
5
6
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
# 如果频繁超时断开可以配置
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;

Q:3、除了做钉钉的代理,还能干什么?

A: 理论上可以代理一切请求,然后转换为 String 通过 WebSocket 推送到客户端。

Q:4、我懒得部署服务了

A:可以使用我提供的公益服务

在回调接口中填写:

WebSocket 地址为:

  • wss://api.xilidou.com

为了防止滥用,每个客户端每次连接只能接收 10 条消息,然后会被断开。

Github 传送门

下一篇文章将会具体讲解,如何使用 vertx 实现这个代理。敬请期待。