问题描述
|
我知道,当我将CURLOPT_FOLLOWLOCATION设置为true时,cURL将跟随Location标头并重定向到新页面。但是,是否有可能只获得新页面的标题而没有实际重定向到那里?还是不可能?
解决方法
否。您必须禁用“ 0”,从响应中提取重定向URL,然后使用该URL发出新的HEAD请求。
,似乎是PHP cURL的副本:不重定向而获取重定向的目标
但是,这可以通过3个简单的步骤完成:
步骤1.初始化卷曲
curl_init($ch); //initialise the curl handle
//COOKIESESSION is optional,use if you want to keep cookies in memory
curl_setopt($ch,CURLOPT_COOKIESESSION,true);
第2步。获取ѭ2的标题
curl_setopt($ch,CURLOPT_URL,$url); //specify your URL
curl_setopt($ch,CURLOPT_HEADER,true); //include headers in http data
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false); //don\'t follow redirects
$http_data = curl_exec($ch); //hit the $url
$curl_info = curl_getinfo($ch);
$headers = substr($http_data,$curl_info[\"header_size\"]); //split out header
步骤3.解析标头以获取新的URL
preg_match(\"!\\r\\n(?:Location|URI): *(.*?) *\\r\\n!\",$headers,$matches);
$url = $matches[1];
有了新的URL后,您可以根据需要重复执行步骤2-3。
,将CURLOPT_FOLLOWLOCATION
设置为false
,将CURLOPT_HEADER
设置为true
,然后从响应头中获取\“ Location \”。
,对于分析标头,您可以使用CURLOPT_HEADERFUNCTION
,是的,您可以将其设置为遵循重定向,直到获得标题响应中的最后一个位置。
获得最后重定向的函数:
function get_redirect_final_target($url)
{
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_NOBODY,1);
curl_setopt($ch,1); // follow redirects
curl_setopt($ch,CURLOPT_AUTOREFERER,1); // set referer on redirect
curl_setopt($ch,false); // if you want to print the header response change false to true
$response = curl_exec($ch);
$target = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
curl_close($ch);
if ($target)
return $target; // the location you want
return false;
}
,确保将“ 7”设置为True以获取响应中的标题,否则响应以空白字符串形式返回