我的流星服务器将从Internet上的其他来源获取数据。请求必须通过代理。如何为服务器端HTTP.call指定代理服务器?
答案 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" });
}
答案 2 :(得分:-1)
由于您的meteor应用程序将运行的平台将作为一个整体在代理服务器后面,因此您通常无论如何都需要代理访问。
因此,您可以将平台(os)设置为默认连接到代理服务器,因此Meteor不一定知道/关心代理的存在,因为它对它是透明的。