• 技术文章 >后端开发 >PHP问题

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

    青灯夜游青灯夜游2021-12-06 17:59:28原创516

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

    本教程操作环境: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;
    }

    推荐学习:《PHP视频教程

    以上就是PHP获取重定向URL的几种方法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 获取重定向URL
    上一篇:php形参和实参的区别是什么 下一篇:php怎么将二维数组转为一维数组
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• php中fetch什么意思• wamp 怎么增加php 7.2• php中怎么给数组增加一个字段• centos 7怎么安装php• php形参和实参的区别是什么
    1/1

    PHP中文网