2015年11月

最近学习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,现在仍然没辙……