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 相关文章推荐
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
php不用正则采集速度探究总结
Mar 24 PHP
php smarty模版引擎中的缓存应用
Dec 02 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
php对称加密算法示例
May 07 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
session 加入redis的实现代码
Jul 15 PHP
php 浮点数比较方法详解
May 05 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 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中数组的三种排序方法分享
2012/05/07 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
js验证表单大全
2006/11/25 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
将Python代码打包为jar软件的简单方法
2015/08/04 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
python实现自动打卡的示例代码
2020/10/10 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
成品仓管员工作职责
2013/12/29 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
《去年的树》教学反思
2016/02/18 职场文书
担保书范文
2019/07/09 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL