2011-07-08 73 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