项目地址 https://github.com/ysmood/digto
和普通的代理工具不同它不需要任何依赖,只要能发送 http 请求就可以在内网处理公网发来的 http 请求。协议非常简单所以可以轻松集成到任何语言而不需要引用依赖。比如调试支付服务的回调时,他们的回调请求来自公网,而我自己的开发服务是在局域网内,利用它就可以将外部请求代理到本地开发服务。相比 ngrok 之类的服务利用这个工具就可以不用常驻一个反代进程了,常驻反代也让有洁癖的人很难受,要是忘了关 ngrok,同一个端口被别的服务用了还可能泄露内部的讯息。
由于可以方便的编程,它也比 ngrok 之类的服务更容易集成到自动化测试中。事实上这也是我们自己用的最多的方式。由于可以用我们自己熟悉的工具 log debug 打断点,有时候反而比那些那些代理工具花里胡哨的功能更便利,当然这个是仁者见仁智者见智。
下面是一个简单的 curl 示例,这里只需要用到 curl 。
打开一个命令行,发送公网请求 curl https://my-subdomain.digto.org/path -d 'ping'
,可以看到请求开始等待返回,my-subdomain
可以为任意值
打开另一个命令行,用它发送返回值给上面这个公网请求,我们要发送两个请求,第一个用来获取 http header,第二个用来发送 response 。示例如下:
curl -i https://digto.org/my-subdomain
# HTTP/2 200
# digto-method: GET
# digto-url: /path
# digto-id: 3dd4e560
#
# ping
# digto-id 的值必须和上面返回的值保持一致
curl https://digto.org/my-subdomain -H 'digto-id: 3dd4e560' -d 'pong'
然后应该能看到第一个命令行收到了 pong 的返回。
目前 digto 自己实现了 golang,ruby 和 nodejs 的 client 供做示例。
如果你不想使用 demo 服务,也可使用源代码启动自己的私服。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.