我正在将drupal 7与Media Youtube模块一起使用。该模块调用youtube oEmbed API。
这是模块将调用的url示例:http://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=YZqqD1Rv5BI
在我的桌面上,这会返回一个json文件,一切都很好。然而,在我的网站服务器上,我收到了一个503服务不可用的错误。事实上,我得到了一个302没有找到,说网址已经移动,然后一个503错误:
以下是我手动进行wget时得到的结果:
wget http://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=YZqqD1Rv5BI
--2014-09-28 21:55:49-- http://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=YZqqD1Rv5BI
Resolving www.youtube.com (www.youtube.com)... 2a00:1450:4007:808::1004, 173.194.40.131, 173.194.40.132, ...
Connecting to www.youtube.com (www.youtube.com)|2a00:1450:4007:808::1004|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://ipv6.google.com/sorry/IndexRedirect?continue=http://www.youtube.com/oembed%3Furl%3Dhttps://www.youtube.com/watch%3Fv%3DYZqqD1Rv5BI [following]
--2014-09-28 21:55:49-- http://ipv6.google.com/sorry/IndexRedirect?continue=http://www.youtube.com/oembed%3Furl%3Dhttps://www.youtube.com/watch%3Fv%3DYZqqD1Rv5BI
Resolving ipv6.google.com (ipv6.google.com)... 2a00:1450:4007:808::1008
Connecting to ipv6.google.com (ipv6.google.com)|2a00:1450:4007:808::1008|:80... connected.
HTTP request sent, awaiting response... 503 Service Unavailable
2014-09-28 21:55:49 ERROR 503: Service Unavailable.
任何帮助都将不胜感激。提前感谢
我遇到了同样的错误,但不幸的是,问题不在模块上(我可以修复它,并提交模块维护程序的补丁)。
正如您已经测试过的,即使是一个简单的wget也会出现同样的问题,这是因为它使用IPv6。如果你可以强制通过IPv4处理对youtube的请求,问题就会得到解决。但这只是一个变通办法,而不是真正的解决办法。
我发现了一种在PHP中强制IPv4 DNS解析的方法:
$url = 'http://www.youtube.com/oembed?format=json&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZVSd5aSXlQ0';
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
$json = curl_exec($c);
$status = curl_getinfo($c,CURLINFO_HTTP_CODE);
curl_close($c);
这个解决方案实际上对我有效。