javascript - 从 Node child_process 执行 Argo Tunnel 时出现错误 1016
问题描述
来自节点 child_process 的 Cloudflare Argo 隧道
我有一个电子应用程序,我想从中生成一个执行的子进程
cloudflared tunnel --url localhost:3000
在某个目录中。从该目录中的 cmd 执行此操作会按预期实例化 argo 隧道,并且 url 在进程运行时有效。这就是我从电子应用程序执行命令的方式:
const { spawn } = require('child_process')
let tunnel = spawn('cloudflared', ['tunnel', '--url', 'localhost:4000'], {
stdio: 'inherit', // Will use process .stdout, .stdin, .stderr
cwd: 'c://cloudflare'
})
我可以看到来自 cloudflare 的正常控制台输出,表明隧道已建立,并且我的服务器正在 some-random-name.trycloudflare.com 上响应。但是,当从电子应用程序中启动该过程时,我在 cloudflare 错误页面上显示错误 1016。
有没有人有使用 Argo Tunnel 和 child_process 的经验?
解决方案
我能够让您的设置在我的 Mac 上正常运行,因此您需要进一步了解设置的详细信息。这是我所做的:
- 从 GitHub安装Electron Fiddle v0.9.0
- 通过with
安装
cloudflared
版本 2019.8.4homebrew
brew install cloudflare/cloudflare/cloudflared
- 从命令行(终端窗口),运行
cloudflared tunnel --url localhost:3000
cloudflared
有一些抱怨:无法确定默认配置路径。[~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /usr/local/etc/cloudflared /etc/cloudflared] 中没有文件 [config.yml config.yaml]
从 shell 运行时 cloudflared 不会自动更新
无法连接到源错误="获取http://localhost:3000 : dial tcp [::1]:3000: connect: connection denied"
- 在 localhost:3000 上启动了一个 Web 服务器
python -m SimpleHTTPServer 3000
- 在我的浏览器中加载页面http://localhost:3000
- 又跑了
同样的抱怨,除了这次它能够连接:cloudflared tunnel --url localhost:3000
将隧道请求代理到http://localhost:3000
进一步的输出
cloudflared
表明它正在建立 4 条隧道。对于每个隧道,它输出+-----------------------------------------------------------+ | Your free tunnel has started! Visit it: | | https://sides-universe-gym-metadata.trycloudflare.com | +-----------------------------------------------------------+ Route propagating, it may take up to 1 minute for your new route to become functional
请注意,我没有更改或混淆 URL,这正是输出的内容,并且
cloudflared
输出相同的 URL 4 次,每个隧道一次。我去了https://sides-universe-gym-metadata.trycloudflare.com并验证它显示的网站与我在 localhost:3000 上显示的网站相同。
我在运行它的终端窗口中
cloudflared
输入 退出。ctrl-c
关闭需要相当长的时间,但我一直等到它退出。我去了https://sides-universe-gym-metadata.trycloudflare.com并验证它显示错误。它显示“错误 1016”和“源 DNS 错误”。
在 Electron Fiddle 中,我选择
Electron v6.0.6
并使用了默认的、预安装main.js
的index.html
、 和renderer.js
. 在main.js
,我在底部添加const { spawn } = require('child_process') let tunnel = spawn('cloudflared', ['tunnel', '--url', 'localhost:3000'], { stdio: 'inherit', // Will use process .stdout, .stdin, .stderr cwd: '/Users/user/development' })
- 我在 Electron Fiddle 上单击了“运行”。“你好世界!” 页面出现了。电子控制台显示来自
cloudflared
.- 再次
cloudflared
调出 4 个隧道,每个隧道的 URL 为https://citysearch-celebs-generator-history.trycloudflare.com cloudflared
然后记录:cloudflared 已更新至 2019.8.4 版本
新进程的PID是81076
退出...
指标服务器已停止
- 我不知道为什么它从“2019.8.4”“更新”到“2019.8.4”。也许它与没有默认配置有关,也许它与 Electron Fiddle 从非标准位置运行它有关。我怀疑这是因为命令行没有包含
--is-autoupdated=true
. - 在“指标服务器停止”之后立即
cloudflared
开始记录其启动消息,就像以前一样。 - 它再次启动了 4 个隧道,这次使用 URL https://gifts-jpg-treasury-correct.trycloudflare.com
- 从启动到重新启动到最后一个稳定隧道启动所用的总时间:14 秒。
- 再次
- 我在本地浏览器中访问了https://gifts-jpg-treasury-correct.trycloudflare.com并再次获得了我在 localhost:3000 托管的站点。
- 我在 Electron 中点击了“停止”。Electron 服务器停止了,但
cloudflared
继续运行。我仍然可以加载https://gifts-jpg-treasury-correct.trycloudflare.com/ - 我在 Electron 中点击了“Run”。再次
cloudflared
提出了4条隧道。这次它没有自动更新或重新启动。4 个新隧道都具有相同的新 URL:https ://reject-pride-built-twisted.trycloudflare.com/ - 我在本地浏览器中访问了https://reject-pride-built-twisted.trycloudflare.com/并再次获得了我在 localhost:3000 托管的站点。我尝试了https://gifts-jpg-treasury-correct.trycloudflare.com,它也仍然有效。
所以我无法重现你的问题。可能的问题是您可能一直在查看出现但cloudflared
已更新的第一个隧道,关闭了该隧道并启动了另一个隧道。这在 Mac 上对我有用,但似乎你在 Windows 上工作,所以它可能是一些特定于 Windows 的问题。可能是您没有运行服务器,localhost:4000
或者您的 Electron 应用程序无法访问C://clouflare
。
您需要提供更多信息,例如您的 Electron 应用程序运行的日志输出cloudflared
以及有关运行的服务器的详细信息以及您设置的localhost:4000
任何配置文件。cloudflared
推荐阅读
- c# - Jose-JWT 中的公钥加密
- r - 使用 readr 读取文本文件,其中引号结束行
- r - R 和 GIS:循环保存文件时遇到问题
- java - 速度 2 不会设置属性
- android - LocationServices 运行时错误
- php - PivotModel 在 laravel 中扩展了 Pivot 如何获取 PivotModel 关系数据
- facebook-login - Facebook 登录 Api 错误,甚至域允许加密 SSL - 不安全登录
- asp.net-mvc - Razor 页面上的 kendo UI 异步上传返回 404
- sql-server - 恢复备份数据库(.bak 文件) - 错误
- python-3.x - 如何在被访问时使用 python 3 从 docx 获取