我目前正在尝试查询在线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
答案 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)');
我唯一想到的是,有些网站只会针对他们认为有效的用户代理发布回复。