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中数据的批量导入(csv文件)
Oct 09 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
php array_merge_recursive 数组合并
Oct 26 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 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实现用户在线时间统计详解
2011/10/08 PHP
浅谈php提交form表单
2015/07/01 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
ExtJs的Date格式字符代码
2010/12/30 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
python paramiko实现ssh远程访问的方法
2013/12/03 Python
关于反爬虫的一些简单总结
2017/12/13 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
表达自我的市场:Society6
2018/08/01 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
英语专业学生的自我评价
2013/12/30 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
软件售后服务承诺书
2014/05/21 职场文书
运动会标语
2014/06/21 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js