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 水平的题目
May 30 PHP
PHP 5.3新特性命名空间规则解析及高级功能
Mar 11 PHP
php笔记之常用文件操作
Oct 12 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
PHP基于工厂模式实现的计算器实例
Jul 16 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP code 验证码生成类定义和简单使用示例
May 27 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 json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
twig模板常用语句实例小结
2016/02/04 PHP
laravel自定义分页效果
2017/07/23 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
如何选择使用结构还是类
2014/05/30 面试题
运动会开幕式主持词
2014/03/28 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
安全口号大全
2014/06/21 职场文书
青年志愿者活动方案
2014/08/17 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
合作协议书范本
2014/10/25 职场文书
重温入党誓词主持词
2015/06/29 职场文书