2011-07-08 58 views
1

我試圖寫一個joomla模塊,它將解析來自springer api的json數據。我有問題的方法「file_get_contents」和其他替代品。我的問題是:file_get_contents和捲曲不起作用,阻止tcp端口問題

Warning: file_get_contents(http://www.example.com) [function.file-get-contents]: failed to open stream: A socket operation was attempted to an unreachable network. in C:\wamp\www\modules\mod_springer\mod_springer.php on line 72

一些搜索後,我發現,這可能是因爲我公司的防火牆。有沒有辦法來解決這個問題,比如改變使用或使用其他方法的端口即時通訊,還是我卡在這裏?

注意:allow_url_fopen已啓用。即時通訊使用wamp。

由於提前,

伊斯梅爾

+0

您是否使用代理服務器連接到互聯網的好運氣? – Gedrox

+0

你真的使用xxx.com像你的警告說,或'api.springer.com'?如果你使用前者,那麼,很可能這個網站可能是你公司的黑名單^^ –

+0

@Gedrox否,即時消息不使用代理 @jurgen不,我使用api.springer.com與他們提供的密鑰:) – ismailkuyu

回答

2

,如果你能說服當權者是允許你通過防火牆訪問遠程API到你想連接你不是卡住了。只要你有一個合法的理由,防火牆訪問可以在一個狹窄的範圍內(一個特定的IP和端口)進行配置,我不明白你爲什麼會遇到問題。

+0

他們表示他們不能解除對港口25的封鎖,但是如果我有機會解決與其他任何港口有關的問題,他們將不會如此嚴格,我猜。我是否讓file_get_contents與其他端口一起工作? – ismailkuyu

+1

@Ismail:只需將端口放入url:'http://example.com:XXX/...'其中XXX是端口號。 –

+2

端口25不應該用於HTTP請求......應該用於SMTP。你確定你有這個權利嗎? –

1

它可能會(也許),以克服捲髮代理處理類似的問題:

curl_setopt($ch, CURLOPT_PROXY, "http://xxx.xxx.xxx.xxx:8080"); 
curl_setopt($ch, CURLOPT_PROXYPORT, 8080); 
curl_setopt ($ch, CURLOPT_PROXYUSERPWD, "xxx:xxx"); 

這將取決於像你這樣的權限了一些東西,如果它僅僅是一個阻塞端口,或它是訪問控制。

我希望這可以幫助你,

+0

感謝您的努力,但仍然無法正常工作,回覆是「錯誤」。 – ismailkuyu

+0

我沒有直接使用端口25,實際上我沒有在代碼中指出任何端口。 IT人士說我可以使用80或8080.下面的代碼仍然無法正常工作。有什麼建議麼? '$ json_feed_url ='http://api.springer.com:80/metadata/json?q = avionics&api_key = xxxxxxxxxxxxxxxx'; $ ch = curl_init(); curl_setopt($ ch,CURLOPT_HEADER,false); curl_setopt($ ch,CURLOPT_PROXY,$ json_feed_url); curl_setopt($ ch,CURLOPT_PROXYPORT,80); curl_setopt($ ch,CURLOPT_PROXYUSERPWD,「xxx:xxx」); curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true); $ json = curl_exec($ ch); curl_close($ ch); $ arr = json_decode($ json); var_dump($ arr);' – ismailkuyu

+0

您是否嘗試從$ json_feed_url中的URL字符串中刪除端口規範?你可能也想嘗試使用0和1的值爲捲曲,而不是真和假,我不是100%肯定爲什麼,但我發現有時這已經爲我工作 – Ryan