设定: 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
答案 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);
。