PHP获取重定向URL的方法是什么

soundcode 阅读:16 2023-03-17 12:59:14 评论:0

PHP获取重定向URL的方法:1、使用get_headers函数来获取,语法“get_headers($url, 1)”;2、使用fsockopen()函数来获取;3、利用curl_init()、curl_setopt()等函数来获取。

PHP获取重定向URL的方法是什么

本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑

1、使用get_headers函数
php自带的get_headers函数可以获取服务器响应一个HTTP请求所发送的所有标头,我们可以尝试用该函数实现。

function get_redirect_url($url){ 
   $header = get_headers($url, 1); 
   if (strpos($header[0], ’301′) !== false || strpos($header[0], ’302′) !== false) { 
     if(is_array($header['Location'])) { 
       return $header['Location'][count($header['Location'])-1]; 
     }else{ 
       return $header['Location']; 
        } 
   }else { 
     return $url; 
   } 
 }

2、使用fsockopen()内置函数

function get_redirect_url($url){ 
   $redirect_url = false; 
   $url_parts = @parse_url($url); 
   if (!$url_parts) return false; 
   if (!isset($url_parts['host'])) return false; 
   if (!isset($url_parts['path'])) $url_parts['path'] = ‘/’; 
   $sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ?   (int)$url_parts['port'] : 80), $errno, $errstr, 30); 
   if (!$sock) return false; 
  $request = “HEAD ” . $url_parts['path'] . (isset($url_parts['query']) ? ‘?’.$url_parts['query'] : ”) . ” HTTP/1.1\r\n”; 
   $request .= ‘Host: ‘ . $url_parts['host'] . “\r\n”; 
   $request .= “Connection: Close\r\n\r\n”; 
   fwrite($sock, $request); 
   $response = ”; 
   while(!feof($sock)) $response .= fread($sock, 8192); 
   fclose($sock); 
  if (preg_match(‘/^Location: (.+?)$/m’, $response, $matches)){ 
     return trim($matches[1]); 
   } else { 
    return false; 
  } 
}

3、使用cURL函数

function get_redirect_url($url, $referer=”, $timeout = 10) { 
   $redirect_url = false; 
   $ch = curl_init(); 
   curl_setopt($ch, CURLOPT_URL, $url); 
   curl_setopt($ch, CURLOPT_HEADER, TRUE); 
   curl_setopt($ch, CURLOPT_NOBODY, TRUE);//不返回请求体内容 
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);//允许请求的链接跳转 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
   curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); 
   curl_setopt($ch, CURLOPT_HTTPHEADER, array( 
      ‘Accept: */*’, 
      ‘User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)’, 
      ‘Connection: Keep-Alive’)); 
   if ($referer) { 
     curl_setopt($ch, CURLOPT_REFERER, $referer);//设置referer 
   } 
   $content = curl_exec($ch); 
   if(!curl_errno($ch)) { 
     $redirect_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);//获取最终请求的url地址 
   } 
   return $redirect_url; 
}



本文参考链接:https://www.yisu.com/zixun/621273.html
标签:PHP
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

搜索
关注我们

一个IT知识分享的公众号