我的curl函数无法跟随Facebook外部链接重定向器的重定向,l.php并且我不知道出了什么问题......
这是我正在处理的代码,我评论了我尝试的行...以及示例链接(http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DGvhFyNLK66A%26feature%3Dyoutu.be&h=xAQFD_3svAQFKxF5YrtqNQ5cL3lIQxo0uaC9PoB7qAvG7Yw&enc=AZPxNZ8P5q54FREC37UC_MP02pwh2DOmsI5bbFkoQm5VUPUlYeNzQASjarRjhTtcedRkmM3mDjK7J_r_P5pRpYhL
)
function connect($u) {
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL, $u);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_HEADER, true);
//curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
//curl_setopt($ch, CURLOPT_REFERER, 'spie');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_AUTOREFERER, true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($ch, CURLOPT_VERBOSE, true);
//curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
$source=curl_exec($ch);
curl_close($ch);
return $source;
}
谢谢..
答案 0 :(得分:1)
我首先认为这是cURL的重定向问题(例如启用了安全模式)。但它实际上来自Facebook重定向器的工作方式。
没有Location:
标题,因此curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
无法帮助您。
Facebook链接页面实际上使用Javascript重定向您:
<script type="text/javascript">document.location.replace("http:\/\/www.youtube.com\/watch?v=GvhFyNLK66A&feature=youtu.be");</script>
cURL无法分析页面的内容,也无法执行javascript,因此这是一种exepcted行为。如果您仍想这样做,则需要解析页面内容,从javascript中获取URL,并向此URL发出新的cURL请求。