如何通过代理生成流星服务器HTTP.call?

时间:2014-02-27 12:47:15

标签: meteor

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

3 个答案:

答案 0 :(得分:6)

如果只有Meteor开发人员接受我的请求将HTTP.*之类的选项传递到proxy模块,{{1> {{1>},则可以通过代理轻松进行所有request次调用包基于。

Please comment on this GitHub issue to ask for that.

更新:由于Meteor开发人员拒绝实施此更改,我发布了一个Atmosphere软件包,允许您向节点(即HTTP模块)传输任何所需的选项。

在Atmosphere上查看 http-more

答案 1 :(得分:0)

找到解决我问题的方法。

我正在使用Windows,并且找不到像Serkan所提到的那样为操作系统设置默认代理的方法。在Internet Explorer Internet选项中设置代理服务器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发出请求。

答案 2 :(得分:-1)

由于您的meteor应用程序将运行的平台将作为一个整体在代理服务器后面,因此您通常无论如何都需要代理访问。

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