【问题标题】:cURL can't follow redirectioncURL 不能跟随重定向
【发布时间】:2012-03-26 01:42:31
【问题描述】:

我的 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;
}

谢谢你..

【问题讨论】:

标签: php curl


【解决方案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,因此这是被执行的行为。如果您仍想这样做,则需要解析页面内容,从 javascript 中获取 URL,并向该 URL 发出新的 cURL 请求。

【讨论】:

  • 非常感谢,我会通过解析 l.php 的内容来完成 :)
【解决方案2】:

显然只有带有“--location”选项的 cURL 支持 HTTP 重定向。 参考:https://everything.curl.dev/http/redirects#non-http-redirects

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2012-01-05
    • 2020-04-15
    相关资源
    最近更新 更多