php获取301跳转URL简单实例


Posted in PHP onDecember 16, 2013
/**
 * get_redirect_url()
 * Gets the address that the provided URL redirects to,
 * or FALSE if there's no redirect. 
 *
 * @param string $url
 * @return string
 */
function get_redirect_url($url){
    $redirect_url = null;     $url_parts = @parse_url($url);
    if (!$url_parts) return false;
    if (!isset($url_parts['host'])) return false; //can't process relative URLs
    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)){
        if ( substr($matches[1], 0, 1) == "/" )
            return $url_parts['scheme'] . "://" . $url_parts['host'] . trim($matches[1]);
        else
            return trim($matches[1]);
    } else {
        return false;
    }
}
/**
 * get_all_redirects()
 * Follows and collects all redirects, in order, for the given URL. 
 *
 * @param string $url
 * @return array
 */
function get_all_redirects($url){
    $redirects = array();
    while ($newurl = get_redirect_url($url)){
        if (in_array($newurl, $redirects)){
            break;
        }
        $redirects[] = $newurl;
        $url = $newurl;
    }
    return $redirects;
}

php实现用socket获取301跳转地址,可以提取跳转过程中的url
PHP 相关文章推荐
优化使用mysql存储session的php代码
Jan 10 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
PHP的几个常用数字判断函数代码
Apr 24 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
关于crontab的使用详解
Jun 24 PHP
如何解决CI框架的Disallowed Key Characters错误提示
Jul 05 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
给ECShop添加最新评论
Jan 07 PHP
php获取本周开始日期和结束日期的方法
Mar 09 PHP
php获取twitter最新消息的方法
Apr 14 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP获取MAC地址的具体实例
Dec 13 #PHP
php配合jquery实现增删操作具体实例
Dec 12 #PHP
php文件上传的例子及参数详解
Dec 12 #PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 #PHP
PHP eval函数使用介绍
Dec 08 #PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 #PHP
php自定义的格式化时间示例代码
Dec 05 #PHP
You might like
php简单获取目录列表的方法
2015/03/24 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
Babel 入门教程学习笔记
2018/06/13 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
python rsa 加密解密
2017/03/20 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
python实现网站微信登录的示例代码
2019/09/18 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
网络方面基础面试题
2012/11/16 面试题
信息管理应届生求职信
2014/03/07 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
2014年宣传工作总结
2014/11/18 职场文书
如何在python中实现ECDSA你知道吗
2021/11/23 Python
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
源码安装apache脚本部署过程详解
2022/09/23 Servers