2017-03-17 34 views
1

我正在使用API​​来返回一组URL,所有URL都有重定向,但有多少重定向以及URL所处的位置未知。如何使用包含META的CURL重新定向所有重定向

所以我想要做的是跟踪路径并找到最后一个URL。

我基本上要做到一样:http://wheregoes.com/retracer.php,但我只需要知道最后的URL

我已经找到一种方法,卷曲做到这一点,但是当它是一个元刷新跟踪停止。

我看到这个帖子:PHP: Can CURL follow meta redirects但它并没有帮助我很多。

这是我当前的代码:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

    $lasturl = trace_url('http://myurl.org'); 

    echo $lasturl; 
+1

您需要编写一个遵循元重定向的脚本。您提供的网址指向您正确的方向。对于每个元刷新,您需要提出新的卷曲请求。 – Scriptman

+0

是的,我已经算了很多。我需要一些处理元刷新脚本的帮助。 – StaalCtrl

+0

问题如何[PHP的:可以CURL遵循元重定向](http://stackoverflow.com/questions/1820705/php-can-curl-follow-meta-redirects)没有帮助?你是如何使用它的? – hassan

回答

0

很好,有Header Redirects之间有很大的区别,这基本上是在3xx类别和META刷新,只是一种方式依赖于服务器上,而其他相关客户端 。

只要curl或已知的cURL或libcurl在服务器中执行,它可以处理第一种类型'Header redirects'或http重定向。

因此,您可以使用一堆方式提取网址。

您将需要手动处理它。

1)报废网页内容。

2)从meta标签中提取链接。

3)抓住这个新的链接,如果你想。


从例如:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

$response = trace_url('http://myurl.org'); 

// quick pattern for explanation purposes only, you may improve it as you like 
preg_match('#\<meta.*?content="[0-9]*\;url=([^"]+)"\s*\/\>#', $response, $links); 

$newLink = $links[1]; 

或如在您对于所提供的解决方案,它是使用simplexml_load_file库问题中提到。

$xml = simplexml_load_file($response); 
$link = $xml->xpath("//meta[@http-equiv='refresh']");