有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法:

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;
}

  

哪个方法的效果更高一些,可以自行测试一下。

from:https://blog.csdn.net/zimuxin/article/details/52228917

【转】PHP获取重定向URL的几种方法相关推荐

  1. PHP获取重定向URL的几种方法

    有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数 php ...

  2. 安卓 获取重定向Url最终地址

    String Url = "http://suo.im/5phIx5"; // 重定向url WebTool.GetRedirectUrl(context, Url, new Ca ...

  3. php url 筛选,PHP获取当前URL路径的处理方法(适用于多条件筛选列表)

    PHP获取当前URL路径的处理方法(适用于多条件筛选列表) 发布于 2017-08-07 05:16:00 | 80 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...

  4. PHP获取POST数据的几种方法汇总

    一.PHP获取POST数据的几种方法 方法1.最常见的方法是:$_POST['fieldname']; 说明:只能接收Content-Type: application/x-www-form-urle ...

  5. php 获取一串随机字符串,php获取随机字符串的几种方法

    方法一:shuffle函数(打乱数组)和mt_rand函数(生成随机数,比rand速度快四倍) /** * 获得随机字符串 * @param $len 需要的长度 * @param $special ...

  6. SQL获取当月天数的几种方法

    SQL获取当月天数的几种方法 原文:SQL获取当月天数的几种方法 日期直接减去int类型的数字 等于 DATEADD(DAY,- 数字,日期) 下面三种方法: 1,日期加一个月减去当前天数,相当于这个 ...

  7. php获取文件真实后缀,php获取文件后缀的9种方法(收藏) - strrpos

    ...理,会用到 strstr,strrchr,strpos,strrpos,substr 等函数,在这里整理记录下.strstrstring strstr ( string $haystack , ...

  8. (转)Shell中获取字符串长度的七种方法

    Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...

  9. php获取post全部数据,PHP获取POST数据的几种方法汇总_PHP教程

    PHP获取POST数据的几种方法汇总 本文给大家汇总介绍了PHP获取POST数据的几种常用方法,这里分享给大家,有需要的小伙伴来参考下吧. 一.PHP获取POST数据的几种方法 方法1.最常见的方法是 ...

最新文章

  1. QQ远程协助没动静?QQ版本有讲究
  2. 图灵直播 | 25年后我们怎样评价JavaScript?
  3. 如何在TypeScript中删除数组项?
  4. [leetcode]236.二叉树的最近公共祖先
  5. java架构师眼中的高并发架构
  6. springsecurity 认证之密码模式
  7. mysql查找前几条数据类型_MySQL与SQLServer的语法区别
  8. java中element转换_java中实体类与xml的element相互转换
  9. python中模块下载方法(conda+pip)
  10. excel两列数据对比找不同_Excel找出不同数据
  11. 什么是模块化,模块化的好处是
  12. JavaScript中三元一次函数的解法
  13. 使用redis碰到maxmemory
  14. 生存分析及生存曲线_2021-01-30
  15. 英文字母间隔变得很大abcdefg
  16. 【UE4】物理引擎(蓝图)
  17. 跟着小梅哥初学FPGA ,vivdao开发平台,二选一多路选择器。
  18. [论文阅读] (14)英文论文实验评估(Evaluation)如何撰写及精句摘抄(上)——以入侵检测系统(IDS)为例
  19. 简述计算机蓝屏的主要原因,常见电脑蓝屏的原因有什么
  20. Python学习笔记---------廖雪峰(基础和函数)

热门文章

  1. WCF后续之旅(16): 消息是如何分发到Endpoint的--消息筛选(Message Filter)
  2. SpringMVC @RequestBody 接收Json数组对象
  3. Windows 8 应用商店应用开发 之 画刷
  4. jQuery-拖动层(在可视区域范围内)
  5. Extjs 格式化---Ext.util.Format类
  6. GameObject 与gameObject的区别
  7. Linux内核之于红黑树and AVL树
  8. Java 学习内容总结
  9. 【BZOJ 1202】 [HNOI2005]狡猾的商人(枚举区间也可行)
  10. 【系统架构师修炼之道】(1):『序』