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 相关文章推荐
php中的时间处理
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
php mssql 日期出现中文字符的解决方法
Mar 10 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
php无限级分类实现方法分析
Oct 19 PHP
PHP asXML()函数讲解
Feb 03 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
Yii2框架加载css和js文件的方法分析
May 25 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
基于jQuery的ajax方法封装
2016/07/14 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
Python实现分割文件及合并文件的方法
2015/07/10 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
python机器人行走步数问题的解决
2018/01/29 Python
Python输入二维数组方法
2018/04/13 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
python递归实现快速排序
2018/08/18 Python
python使用Matplotlib画饼图
2018/09/25 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
什么是View State?
2013/01/27 面试题
会计系毕业个人自荐信格式
2013/09/23 职场文书
护士实习鉴定范文
2013/12/22 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
2015年保管员工作总结
2015/04/30 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript