我正在尝试进行一些本地托管的facebook开发,但我在大学网络上,因此我计算机的所有传出连接都需要通过我们的代理服务器。我遇到的主要问题是,我似乎找不到任何文档来设置apache使用代理服务器,而不是充当代理服务器。
然而,考虑到这一点,也许当我执行"cURL"请求或fopen时,apache不执行数据检索,而是由PHP驱动程序执行。旧版本允许您在PHP.ini文件中设置全局代理,但不能在PHP5中设置。
我必须使用代码来实际设置默认值,并且找不到任何可以永久设置它们的配置文件。例如,这设置了流,以便fopen可以运行:
$r_default_context = stream_context_get_default
(
array
(
'http' => array
( // All HTTP requests are passed through the local NTLM proxy server on port 8080.
'proxy' => 'tcp://proxy.munged.edu:8080',
'request_fulluri' => True,
),
)
);
但这不会设置使用cURL所需的所有内容,我必须这样做:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, "http://proxy.munged.edu:8080");
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
有没有人知道如何设置所有需要传出连接的东西来使用这个代理,因为我不会对这台计算机特定的代码进行编码(因为我的计划是在本地处理我的代码,然后在完成后将其上传到一些网络空间:更改/上传/刷新周期比更改/刷新周期更耗时)
编辑:
为了澄清,我已经将所有这些包含在一个名为"proxyconfig.php"的文件中,然后检查它是否存在,并在顶部包含()。如果没有办法在配置文件中设置默认值,那么拥有为API设置facebook.php页面所需的所有内容的方法将是令人敬畏的。
您的方法是正确的,假设应用程序处于iframe模式(FBML应用程序要求Facebook能够回调到您的服务器)。
如果问题是希望能够在本地开发并部署到远程站点,而对文件的修改最小,我建议将BaseFacebook扩展为一个名为LocalBaseFacebook的新类,并将CURL_OPTS更改为:
public static $CURL_OPTS = array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_USERAGENT => 'facebook-php-3.0',
CURLOPT_PROXY => 'http://proxy.munged.edu:8080',
CURLOPT_PROXYPORT => 8080
);
在部署时,在基于主机名或某些唯一标识的属性/配置实例化Facebook类时进行切换(您甚至可以使用$_GET变量,如?is_local=1),并将其附加到Canvas URL的末尾。