Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用CURL跟踪所有重定向,包括元刷新_Php_Redirect_Curl_Refresh_Meta - Fatal编程技术网

Php 如何使用CURL跟踪所有重定向,包括元刷新

Php 如何使用CURL跟踪所有重定向,包括元刷新,php,redirect,curl,refresh,meta,Php,Redirect,Curl,Refresh,Meta,我正在使用API返回一组URL,所有URL都有重定向,但重定向的数量和URL的位置未知 所以我要做的是跟踪路径并找到最后一个URL 我基本上想做相同的:,但我只需要知道最后一个网址 我已经找到了一种使用CURL的方法,但是当它是元刷新时跟踪就会停止 我见过这条线,但对我帮助不大 这是我当前的代码: function trace_url($url){ $ch = curl_init($url); curl_setopt_array($ch, array( CURLO

我正在使用API返回一组URL,所有URL都有重定向,但重定向的数量和URL的位置未知

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

我基本上想做相同的:,但我只需要知道最后一个网址

我已经找到了一种使用CURL的方法,但是当它是元刷新时跟踪就会停止

我见过这条线,但对我帮助不大

这是我当前的代码:

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;

好的,有一个很大的区别,基本上是在3xx类和元刷新下,只是一种方式依赖于服务器,另一种方式与客户端相关

只要在服务器中执行curl或已知的curl或libcurl,它就可以处理第一种类型的“头重定向”或http重定向

因此,您可以使用多种方法提取url

您需要手动处理它

1) 废弃网页内容

2) 从元标记中提取链接

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];

您需要编写一个遵循元重定向的脚本。您提供的URL为您指明了正确的方向。对于每一次元刷新,您都需要提出一个新的curl请求。是的,我也这么认为。我需要一些关于处理元刷新的脚本的帮助。这个问题怎么没有帮助?你是怎么用的?
$xml = simplexml_load_file($response);
$link = $xml->xpath("//meta[@http-equiv='refresh']");