PHP Requests的一次历险
最近学习PHP,使用Slim Framework搭建,其中要实现一个获取当日天气的小功能来练手,使用了网上推荐的Requests库来用。
昨晚一切正常,使用的是百度提供的API。今天早上开机,发现获取不到数据了,查看报错信息,发现Requests总在我的URL后加上1080端口进行访问。
我看了下报错信息:
'cURL error 7: Failed connect to apistore.baidu.com:1080; No error'
而1080端口是我本地ShadowSocks的端口,我为了加快某些服务的速度,使用的代理,比如Git,Composer等。我打开ShadowSocks,果然,又可以获取到天气数据了。我确认是这个1080端口有问题。
但是,我并没有指定Requests的代理啊,按照官网上说的,指定代理方法为:
$options = array(
'proxy' => '127.0.0.1:3128'
);
Requests::get('http://httpbin.org/ip', array(), $options);
我并没有这样做啊。
Requests使用的是PHP的cURL,难道我配置了cURL的某些变量?我又在想,我搜了Requests的代码,发现有一处设置CURLOPT_PROXY的地方:
public function curl_before_send(&$handle) {
curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
if ($this->use_authentication) {
curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
}
}
可是这块的$this->proxy是在Requests中配置的,所以并不是这块有问题。
那就可能是PHP的cURL本身配置了一些东西。cURL有配置属性的方法curl_setopt,但是并没有相对应的获取属性的方法,只有一个curl_getinfo,这个方法只能获取部分属性,我需要的代理属性并不能获取到。
So,现在仍然没辙……