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 相关文章推荐
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
实现获取http内容的php函数分享
Feb 16 PHP
简单实用的PHP防注入类实例
Dec 05 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
php中namespace use用法实例分析
Jan 22 PHP
PHP数组实例详解
Jun 26 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 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脚本加密专家php解密算法
2020/09/13 PHP
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
详解php协程知识点
2018/09/21 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
Python入门_条件控制(详解)
2017/05/16 Python
python之文件读取一行一行的方法
2018/07/12 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
通过自学python能找到工作吗
2020/06/21 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
Python实现自动装机功能案例分析
2020/10/22 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
学生实习介绍信
2014/01/15 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers