curl在php(超时)vs curl命令行(工作正常)

时间:2014-07-30 19:47:25

标签: php curl

我目前正在尝试查询在线API。一些示例代码:

$ch = curl_init("https://gdata.youtube.com/feeds/api/users/UC_x5XG1OV2P6uZZ5FSM9Ttw/playlists");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 50,
    CURLOPT_IPRESOLVE      => CURL_IPRESOLVE_V4
]);

$data = curl_exec($ch); 

curl_close($ch);

我得到:curl(7) couldn't connect to host

如果你在CLI上做同样的事情,一切正常:

$ curl -vvv "https://gdata.youtube.com/feeds/api/users/UC_x5XG1OV2P6uZZ5FSM9Ttw/playlists"

* About to connect() to gdata.youtube.com port 443 (#0)
*   Trying 173.194.113.1... connected
...

我首先怀疑IPv6是问题所在,但我将其停用。它没有帮助:

$ sudo sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

2 个答案:

答案 0 :(得分:0)

由于您已经有CONNECTTIMEOUT,因此可能不是卷曲超时。

超时可能是为了执行PHP。

您可以尝试set_time_limit(0)来解决这个问题,看看它是否有帮助。

同时尝试curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);来克服代理配置

答案 1 :(得分:0)

我通过PHP卷曲超时有一个稍微不同的问题,但它与你的问题类似,因为它通过命令行工作正常。一旦我设置User-Agent标题,我发现我的PHP代码工作正常:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)');

我唯一想到的是,有些网站只会针对他们认为有效的用户代理发布回复。