我想获得url的完整重定向路径。
假设source.com在多次重定向后重定向到destination.com,如下所示:http://www.source.com/->http://www.b.com/->http://www.c.com/->http://www.destination.com/
如何获取所有重定向的URL?
使用下面的代码,我只得到http://www.destination.com/如何检测完整的url重定向链?
<?php
$url='windows.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow the redirects
curl_setopt($ch, CURLOPT_HEADER, false); // no needs to pass the headers to the data stream
curl_setopt($ch, CURLOPT_NOBODY, true); // get the resource without a body
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // accept any server certificate
curl_exec($ch);
// get the last used URL
$lastUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
echo $lastUrl;
?>
此代码有另一个问题,它无法检测youtube重定向的重定向url。测试URL:https://www.youtube.com/redirect?redir_token=QUFFLUhqbkVxUFZUME9NbWF4RThxdFpGV3pmTTJEdFVWQXxBQ3Jtc0tubGJqU016TzJ6WnlfeUItX0ZmOUItUE1jRlZoZXhxMzNpQllpM0NLSk4ycnBLMGNidTFsX3N6WkU2X3RsUTRZb1lXQVp5SEZjbnU3eDFuZS1VU3dhdzg2QW9ZMTl1azFCZFZHcHRLdFF3dTM1MlRWdw%3D%3D&event=video_description&v=KEa2XWRGf_4&q=https%3A%2F%2Fwww.facebook.com%2Fabhiandniyu
我的问题是如何检测所有类型重定向请求的完整url重定向链。
您可能缺少:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
将它添加到您的CURL配置中,然后它就可以工作了。
不要遵循HTTP重定向:curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
并输出HTTP头,同时测试:curl_setopt($ch, CURLOPT_HEADER, true);
然后,您可以从收到的HTTP 302
响应中获得Location
标头。
如果是多个重定向,则必须在循环中运行,直到收到HTTP 200
为止。在这种情况下,HTTP 200
意味着已经到达最终目的地。
您可以在PHP中使用curl_getinfo((函数来获取有关上次传输的信息。这包括总重定向计数和重定向路径中所有URL的数组。这里有一个例子:
$url = 'http://www.source.com/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$redirectCount = curl_getinfo($ch, CURLINFO_REDIRECT_COUNT);
$redirectUrlList = curl_getinfo($ch, CURLINFO_REDIRECT_URL);
echo "Total redirects: $redirectCountn";
echo "Redirect URL list: n";
print_r($redirectUrlList);
这将输出类似于:
Total redirects: 3
Redirect URL list:
Array
(
[0] => http://www.b.com/
[1] => http://www.c.com/
[2] => http://www.destination.com/
)
然后,您可以使用这些信息来跟踪完整的重定向路径。
或者,您可以使用各种工具,如RedirHub的重定向检查器https://www.redirhub.com/tool/redirect-checker.该工具允许您输入URL,并查看它是否重定向,如果重定向,重定向次数和最终目的地URL