2014-02-27 41 views
3

我的流星服務器將從互聯網上的其他來源獲取數據。該請求必須通過代理。如何爲服務器端HTTP.call指定代理服務器?如何通過代理使流星服務器HTTP.call?

+1

重複[如何強制Meteor應用程序通過代理進行所有HTTP調用?](http://stackoverflow.com/questions/20040953/how-can-i-force-a-meteor-通過代理應用程序的所有HTTP呼叫)(我自己問這個問題:)雖然SO是令人驚訝的不好發現它相關。 –

回答

0

找到我的問題的解決方案。

我使用Windows,無法找到一種方法來設置默認代理的OS爲塞爾坎提及。在Internet Explorer Internet選項中設置代理服務器LAN設置不起作用。 winHTTP中的設置代理不起作用。任何人都知道如何做到這一點?

最合理的將是節點讀取環境變量和使用的。所以,我創建了一個環境變量「HTTP_PROXY」,並看是否節點會讀它我想:

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

,並沒有輸出我的變量。但是,當試圖在Node內直接創建http.get()請求時,它失敗了。節點顯然不使用該變量...

結論是,我必須明確地設置我的應用程序中的代理,但這是不可能與流星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" }); 
} 
  • 包括請求模塊
  • 裹第三-lib的異步方法,所以我們可以在流星
  • 使用
  • 設置請求模塊
  • 使用makeRequest的發出請求的代理財產。
+0

與此同時我已經[發佈了一個包](http://stackoverflow.com/a/22069540/1269037),應該允許您將選項傳遞給Node的'request'模塊。 –

+1

幾乎降低了您使用Windows的權利。 – nottinhill

-1

由於您的流星應用程序將運行的平臺將是代理爲一體的背後,你會需要代理訪問通常反正。

因此,你可以設置你的平臺(操作系統)最高默認連接到代理服務器,因此流星不一定會知道/關心的代理的存在,因爲它是透明的了。

+0

我[發表一個模塊(http://stackoverflow.com/a/22069540/1269037),允許參數傳遞到節點的'request'模塊,包括代理。這樣,只有流星應用需要通過代理。 –

6

您可以輕鬆地通過代理讓所有HTTP.*電話如果只是流星開發商接受了我的要求拉像proxy通過選項給request模塊,在其上HTTP包爲主。

Please comment on this GitHub issue to ask for that.

更新:由於流星開發者拒不執行這種變化,我發表了大氣包,讓您傳輸到節點(即到request模塊)所需的任何選項。

檢出http-more在大氣。

+0

你可以給我們一個如何使用http-more來設置代理服務器和流星項目的例子嗎? – Andrew

+0

@Andrew:我自己沒有使用代理,但[其他人有](https://github.com/StockBase/meteor-http-more/pull/3)。語法與[請求模塊](https://github.com/request/request#requestoptions-callback)的語法相同:只需將'proxy'添加到[http options](https:// docs。 meteor.com/#/full/http)對象。 –