【问题标题】:How do I make meteor server HTTP.call through proxy?如何通过代理制作流星服务器 HTTP.call?
【发布时间】:2014-10-29 11:18:49
【问题描述】:

我的流星服务器将从 Internet 上的另一个来源获取数据。请求必须通过代理。如何为服务器端 HTTP.call 指定代理服务器?

【问题讨论】:

标签: meteor


【解决方案1】:

如果只有 Meteor 开发人员接受我的拉取请求,将 proxy 之类的选项传递到 request 模块(HTTP 包基于该模块),您就可以轻松地通过代理进行所有 HTTP.* 调用。

Please comment on this GitHub issue to ask for that.

更新:由于 Meteor 开发人员拒绝实施该更改,我发布了一个 Atmosphere 包,可让您将所需的任何选项传输到 Node(即request 模块)。

在 Atmosphere 上查看 http-more

【讨论】:

  • 能否给我们举个例子,如何使用 http-more 来设置一个流星项目的代理服务器?
  • @Andrew:我自己没有使用代理,但是others have。语法与request module 的语法相同:只需将proxy 添加到http options 对象即可。
【解决方案2】:

为我的问题找到了解决方案。

我使用的是 Windows,但无法找到为操作系统设置默认代理的方法,如 Serkan 所述。在 Internet Explorer 互联网选项 LAN 设置中设置代理服务器不起作用。 winHTTP 中的设置代理不起作用。还有人知道怎么做吗?

最合理的是 Node 读取一个环境变量并使用它。因此,我创建了一个环境变量“HTTP_PROXY”并尝试查看节点是否会读取它:

D:\Appl\.meteor\tools\a5dc07c9ab\bin>node -e "console.log(process.env.http_proxy)"

它确实输出了我的变量。但是,当尝试直接在 Node 中发出 http.get() 请求时,它失败了。 Node 显然没有使用那个变量...

结论是我必须在我的应用程序中显式设置代理,但使用 Meteor HTTP 是不可能的。相反,我可以使用请求模块(Meteor HTTP 正在使用)并设置代理。不是理想的解决方案,因为我的应用程序必须了解代理,但可以满足我的目的。

if (Meteor.isServer) {
    var request = Npm.require("request");
    var makeRequest = Meteor._wrapAsync(thirdLibMakeRequest);
    function thirdLibMakeRequest(options, callback) {
        options.proxy = "http://myProxyServer:8080";
        request(options, callback);
    };
    var response = makeRequest({ url: "http://UrlToSomeSite" });
}
  • 包含请求模块
  • 包装 3rd-lib 异步方法,以便我们可以在 Meteor 中使用它
  • 设置请求模块的代理属性
  • 使用 makeRequest 发出请求。

【讨论】:

  • 在此期间,我有 published a package,它应该允许您将选项传递给 Node 的 request 模块。
【解决方案3】:

由于您的流星应用程序将在其上运行的平台作为一个整体在代理之后,因此您通常需要代理访问。

因此,您可以将您的平台 (os) 设置为默认连接到代理服务器,因此 Meteor 不一定知道/关心代理的存在,因为它对它是透明的。

【讨论】:

  • 我有 published a module,它允许将参数传递给 Node 的 request 模块,包括代理。这样只有流星应用程序需要通过代理。
猜你喜欢
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
相关资源
最近更新 更多