代理后面的LAMP服务器上的Joomla站点无法访问HTTP资源流

时间:2009-09-25 12:06:00

标签: php proxy curl lamp

设定: 1. LAMP服务器上的Joomla 1.5网站(CentOS 5.2 / Apache 2.2 / PHP 5.2.9 / mysql 5) 2.添加了用于货币转换的Joomla模块。模块使用谷歌财务转换货币 3. LAMP堆栈驻留在代理后面的Intranet中。已设置http_proxy,yum.conf代理的服务器环境变量,并成功更新内核。 4. phpinfo()清楚地显示了curl的安装 5.'2'中提到的模块允许3种方法连接到google finance,fread(),file_get_contents()和使用cURL库。由于框位于代理后面,因此只有cURL库方法才有效。

问题: 在WAMP堆栈上,curl库方法工作正常。但是,在灯具堆栈上,模块无法与谷歌财务部门通信,并抛出提示连接超时的错误。这里有一些代码可以让它更清晰。

if (isset($_GET['process'])) {        
$url = "http://finance.google.com/finance/converter?a={
$_GET['a']}&from={$_GET['from']}&to={$_GET['to']}";
$app->get_page($url);
$data = $app->process();
}  

function get_page($url) {
if ($url!='') {
echo $url;
$ch = curl_init ();
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_URL, $url);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                    curl_setopt($ch, CURLOPT_BINARYTRANSFER, $this->binary);
                    $this->html = curl_exec($ch);
                    curl_close($ch);
            }
    }

我甚至尝试添加curl_setopt($ ch,CURLOPT_PROXY,'10 .x.xx.xx:8080');在curl_init()之后,无济于事。我已经用libcurl和php编译了apache,我需要知道以下内容: 1.如何指示php通过代理路由传出请求(流)? 2.我是否需要使用proxyname和port配置cURL(libcurl)? 3.我已经关闭了iptables,因此linux防火墙不再出现了,我还需要做些什么才能允许传出请求吗? 4.我已经设置了代理,以便我的LAMP堆栈对所有内容都是解锁的,cURL在命令行上运行,但不是从php / apache。我错过了什么?任何环境变量?任何开关?

提前感谢您的时间。

Shrinivas

1 个答案:

答案 0 :(得分:1)

以下是在端口1090上使用本地SOCKS5代理的示例:

<?php
$url = 'www.whatismyip.com/automation/<your unique whatismyip hash>';

function get_page($url, $proxy=true) {
    if ($url!='') {
        $ch = curl_init ();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        if ($proxy) {
            curl_setopt($ch, CURLOPT_PROXY, 'localhost');
            curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
            curl_setopt($ch, CURLOPT_PROXYPORT, 1090);
        }
        $html = curl_exec($ch);
        curl_close($ch);
        return $html;
    }
}


var_dump(get_page($url));
var_dump(get_page($url, false));

您可能希望改为使用curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);curl_setopt($ch, CURLOPT_PROXYPORT, 8080);