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 相关文章推荐
web方式ftp
Oct 09 PHP
用php+mysql一个名片库程序
Oct 09 PHP
php下实现伪 url 的超简单方法[转]
Sep 24 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
用php实现选择排序的解决方法
May 04 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
php swoft框架实例用法
2020/12/22 PHP
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
python如何为被装饰的函数保留元数据
2018/03/21 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python 图像平移和旋转的实例
2019/01/10 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
宿舍打麻将检讨书
2014/01/24 职场文书
行政司机岗位职责
2015/04/10 职场文书
中秋节晚会开场白
2015/05/29 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle