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 中的批处理的实现
Jun 14 PHP
php 特殊字符处理函数
Sep 05 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
php中的观察者模式简单实例
Jan 20 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
php实现的任意进制互转类分享
Jul 07 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
php DES加密算法实例分析
Sep 18 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读取数据库信息的几种方法
2008/05/24 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python 编码规范整理
2018/05/05 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
opencv+python实现均值滤波
2020/02/19 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
物业管理计划书
2014/01/10 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2014年营销工作总结
2014/11/22 职场文书
2014小学年度工作总结
2014/12/20 职场文书
运动会广播稿200字
2015/08/19 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书