Php 如何使用CURL跟踪所有重定向,包括元刷新
我正在使用API返回一组URL,所有URL都有重定向,但重定向的数量和URL的位置未知 所以我要做的是跟踪路径并找到最后一个URL 我基本上想做相同的:,但我只需要知道最后一个网址 我已经找到了一种使用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
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']");