Nodejs:怎么为 node-webkit 应用单独设置一个 Http Proxy呢?

Nodejs:怎么为 node-webkit 应用单独设置一个 Http Proxy呢?

看文档说在 Windows 平台上直接调用的 IE 的 Proxy 设置,但是想为 Node 应用单独设置一个代理。

5 回复

当然可以。以下是如何为 node-webkit 应用单独设置一个 HTTP 代理的详细步骤和示例代码。

如何为 Node-Webkit 应用单独设置一个 HTTP 代理

在 Node.js 环境中,你可以通过修改 httphttps 模块的默认代理设置来为你的应用单独配置代理。这可以通过使用 global-tunnel-ng 这个 npm 包来实现。global-tunnel-ng 可以让你的应用通过指定的代理服务器进行网络请求。

安装 global-tunnel-ng

首先,你需要安装 global-tunnel-ng 包:

npm install global-tunnel-ng --save

示例代码

接下来,在你的 node-webkit 应用启动时,初始化代理设置:

var globalTunnel = require('global-tunnel-ng');

// 设置代理地址和端口
var proxyUrl = 'http://your-proxy-server:port';

// 初始化全局代理
globalTunnel.init(proxyUrl, {
    // 可选:设置代理认证信息
    auth: 'username:password'
});

// 示例:发起一个 HTTP 请求
var http = require('http');

http.get('http://example.com', function(res) {
    res.pipe(process.stdout);
});

解释

  1. 引入 global-tunnel-ng

    var globalTunnel = require('global-tunnel-ng');
    
  2. 设置代理地址

    var proxyUrl = 'http://your-proxy-server:port';
    

    这里你需要替换为你实际使用的代理服务器地址和端口。

  3. 初始化全局代理

    globalTunnel.init(proxyUrl, {
        auth: 'username:password'
    });
    

    如果你的代理需要认证,可以添加 auth 参数。否则,可以省略该参数。

  4. 发起网络请求

    var http = require('http');
    
    http.get('http://example.com', function(res) {
        res.pipe(process.stdout);
    });
    

通过以上步骤,你可以为你的 node-webkit 应用单独设置一个 HTTP 代理,从而确保所有网络请求都通过指定的代理服务器进行。


rogerwang 说这个功能还要开发中,暂时还没有。

可以曲线救国,需要web内容的时候,调用 curl 来获取,这样就可以设置各种 proxy 了

这也是一个办法,不过,我需要所有资源都经过代理,比如页面中引用到的资源之类的。

要在 Node-WebKit(现称为 NW.js)应用中单独设置 HTTP 代理,你可以通过修改 package.json 文件中的配置或使用 nw.gui 模块来实现。以下是一种方法:

方法1:通过 package.json 配置

  1. 打开你的项目根目录下的 package.json 文件。
  2. 添加或修改 chromium-args 字段,添加代理配置。
{
  "name": "your-app-name",
  "version": "0.1.0",
  "main": "index.html",
  "chromium-args": "--proxy-server=http://your-proxy-address:port"
}

替换 your-proxy-addressport 为你实际使用的代理服务器地址和端口。

方法2:使用 nw.gui 动态设置

你也可以在运行时动态设置代理,这需要使用 nw.gui 模块。

var gui = require('nw.gui');
var win = gui.Window.get();

// 设置代理
win.showDevTools();
win.webview.src = 'http://example.com';
win.webview.proxy = {
    server: 'http://your-proxy-address:port'
};

注意:win.showDevTools() 是为了显示开发者工具,便于调试。win.webview 是假设你在使用 <webview> 标签。

示例代码

以下是一个完整的示例,展示如何在 index.html 中加载内容并通过代理访问:

<!DOCTYPE html>
<html>
<head>
  <title>Node-WebKit with Proxy</title>
</head>
<body>
  <script>
    var gui = require('nw.gui');
    var win = gui.Window.get();

    // 动态设置代理
    win.on('loaded', function() {
        win.showDevTools(); // 显示开发者工具
        win.evalNode('require("nw.gui").Window.get().webview.proxy = { server: "http://your-proxy-address:port" };');
    });
  </script>
</body>
</html>

总结

上述两种方法都可以让你为 Node-WebKit 应用设置独立的 HTTP 代理。第一种方法简单且静态,适用于大多数场景;第二种方法更灵活,可以在运行时动态设置代理。

回到顶部