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 相关文章推荐
一个高ai的分页函数和一个url函数
Oct 09 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
php的memcached客户端memcached
Jun 14 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 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在apache环境下实现gzip配置方法
2015/04/02 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
js读取本地文件的实例
2017/12/22 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
python使用webbrowser浏览指定url的方法
2015/04/04 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
python实发邮件实例详解
2019/11/11 Python
python实现滑雪游戏
2020/02/22 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python爬虫---requests库的用法详解
2020/09/28 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
创意广告词
2014/03/17 职场文书
中国梦读书活动总结
2014/07/10 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
考研复习计划
2015/01/19 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
Pandas自定义选项option设置
2021/07/25 Python