【转】PHP获取重定向URL的几种方法
有时候我们会在开发中,经常会遇到有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的几种方法相关推荐
- PHP获取重定向URL的几种方法
有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数 php ...
- 安卓 获取重定向Url最终地址
String Url = "http://suo.im/5phIx5"; // 重定向url WebTool.GetRedirectUrl(context, Url, new Ca ...
- php url 筛选,PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
PHP获取当前URL路径的处理方法(适用于多条件筛选列表) 发布于 2017-08-07 05:16:00 | 80 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...
- PHP获取POST数据的几种方法汇总
一.PHP获取POST数据的几种方法 方法1.最常见的方法是:$_POST['fieldname']; 说明:只能接收Content-Type: application/x-www-form-urle ...
- php 获取一串随机字符串,php获取随机字符串的几种方法
方法一:shuffle函数(打乱数组)和mt_rand函数(生成随机数,比rand速度快四倍) /** * 获得随机字符串 * @param $len 需要的长度 * @param $special ...
- SQL获取当月天数的几种方法
SQL获取当月天数的几种方法 原文:SQL获取当月天数的几种方法 日期直接减去int类型的数字 等于 DATEADD(DAY,- 数字,日期) 下面三种方法: 1,日期加一个月减去当前天数,相当于这个 ...
- php获取文件真实后缀,php获取文件后缀的9种方法(收藏) - strrpos
...理,会用到 strstr,strrchr,strpos,strrpos,substr 等函数,在这里整理记录下.strstrstring strstr ( string $haystack , ...
- (转)Shell中获取字符串长度的七种方法
Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...
- php获取post全部数据,PHP获取POST数据的几种方法汇总_PHP教程
PHP获取POST数据的几种方法汇总 本文给大家汇总介绍了PHP获取POST数据的几种常用方法,这里分享给大家,有需要的小伙伴来参考下吧. 一.PHP获取POST数据的几种方法 方法1.最常见的方法是 ...
最新文章
- QQ远程协助没动静?QQ版本有讲究
- 图灵直播 | 25年后我们怎样评价JavaScript?
- 如何在TypeScript中删除数组项?
- [leetcode]236.二叉树的最近公共祖先
- java架构师眼中的高并发架构
- springsecurity 认证之密码模式
- mysql查找前几条数据类型_MySQL与SQLServer的语法区别
- java中element转换_java中实体类与xml的element相互转换
- python中模块下载方法(conda+pip)
- excel两列数据对比找不同_Excel找出不同数据
- 什么是模块化,模块化的好处是
- JavaScript中三元一次函数的解法
- 使用redis碰到maxmemory
- 生存分析及生存曲线_2021-01-30
- 英文字母间隔变得很大abcdefg
- 【UE4】物理引擎(蓝图)
- 跟着小梅哥初学FPGA ,vivdao开发平台,二选一多路选择器。
- [论文阅读] (14)英文论文实验评估(Evaluation)如何撰写及精句摘抄(上)——以入侵检测系统(IDS)为例
- 简述计算机蓝屏的主要原因,常见电脑蓝屏的原因有什么
- Python学习笔记---------廖雪峰(基础和函数)
热门文章
- WCF后续之旅(16): 消息是如何分发到Endpoint的--消息筛选(Message Filter)
- SpringMVC @RequestBody 接收Json数组对象
- Windows 8 应用商店应用开发 之 画刷
- jQuery-拖动层(在可视区域范围内)
- Extjs 格式化---Ext.util.Format类
- GameObject 与gameObject的区别
- Linux内核之于红黑树and AVL树
- Java 学习内容总结
- 【BZOJ 1202】 [HNOI2005]狡猾的商人(枚举区间也可行)
- 【系统架构师修炼之道】(1):『序』