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中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
php中Ctype函数用法详解
Dec 09 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
php 生成签名及验证签名详解
Oct 26 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
php面向对象重点知识分享
Sep 27 PHP
使用PHP开发留言板功能
Nov 19 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 错误之引号中使用变量
2009/05/04 PHP
php实现异步数据调用的方法
2015/12/24 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
用javascript做拖动布局的思路
2008/05/31 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
pygame加载中文名mp3文件出现error
2017/03/31 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python实现简单井字棋小游戏
2020/03/05 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
新年抽奖获奖感言
2014/03/02 职场文书
精彩的广告词
2014/03/19 职场文书
2015暑假假期总结
2015/07/13 职场文书
高质量“欢迎词”
2019/04/03 职场文书
个人工作总结怎么写?
2019/04/09 职场文书