URL短地址压缩算法-短网址映射_超级谷歌的博客-CSDN博客_长短地址映射


本站和网页 https://blog.csdn.net/it_man/article/details/8973156 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

URL短地址压缩算法-短网址映射_超级谷歌的博客-CSDN博客_长短地址映射
URL短地址压缩算法-短网址映射
超级谷歌
于 2013-05-25 12:56:16 发布
20022
收藏
分类专栏:
Web开发技术相关
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/it_man/article/details/8973156
版权
Web开发技术相关
专栏收录该内容
49 篇文章
0 订阅
订阅专栏
 微博短地址原理解析 (Java实现)
一种方法是调用第三方提供短址服务的接口来生成即可。一般他们提供接口或调用包。
如:
怎样调用百度短网址api?  http://www.baidu.com/search/dwz.html (无需授权即可调用)
新浪短网址API接口(3月15日更新)
新浪更新后的长网址转短网址官方API文档:http://open.weibo.com/wiki/2/short_url/shorten
调用地址:https://api.weibo.com/2/short_url/shorten.json
请求方式:GET
请求参数:
access_token:  授权后获得url_long:  待转换的长地址
返回结果:
"urls": [
"url_short": "http://t.cn/h4DwT1",
"url_long": "http://finance.sina.com.cn/",
"type": 0,
"result": "true"
注意:每次使用时都需要access_token,而access_token是需要登录后授权才能得到的。如果你想做一个短网址转换的应用,肯定不能要求用户先登录微博、授权、然后才能使用你的功能,这样用户体验太差。你可以在服务器端用个测试帐号定期授权来获取access_token,这样就不需要用户登录微博授权了,用户可以直接输入长网址,获取转换后的短网址。
关于如何授权获取access token,请参考这篇博文:http://www.cnblogs.com/e241138/archive/2013/03/15/sina-weibo-oauth-access_token.html
第二种方法是自己实现,可以单独搭建服务器提供短网址映射服务。
有个关键点 ..短网址 是否可以直接通过算法还原..如果不能直接通过算法还原..
需要借助存储(无论是db,缓存,nosql或者别的什么),那么其实采用什么样的算法都不是重点. )
 最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法:
再根据自己的理解,用Java实现了该短网址(ShortUrl)的算法。(\(^o^)/YES!我还真厉害!)
先来废话一下,是在别人的帖子上看到的,主要是让大家了解一下短网址(ShortUrl)。
时下,短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的t.cn等。
我们在新浪微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://t.cn/hrYnr0。为什么要这样做的,原因我想有这样几点:
1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖性、暴力、广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
3、我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。
其实以上三点纯属个人观点,因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料):
① 将长网址用md5算法生成32位签名串,分为4段,,每段8个字符;
② 对这4段循环处理,取每段的8个字符, 将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;
③ 将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
④ 这样一个md5字符串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址。
很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。
首先,请大家了解在Java中如何用MD5来加密字符串得到32位的加密后的字符串,下面是我已经封装好的Java MD5算法:
[java] 
view plain
copy
private final static String[] hexDigits = {         "0", "1", "2", "3", "4", "5", "6", "7",          "8", "9", "a", "b", "c", "d", "e", "f"};           public static String byteArrayToHexString(byte[] b){           StringBuffer resultSb = new StringBuffer();           for (int i = 0; i < b.length; i++){               resultSb.append(byteToHexString(b[i]));           }           return resultSb.toString();       }          private static String byteToHexString(byte b){           int n = b;           if (n < 0)               n = 256 + n;           int d1 = n / 16;           int d2 = n % 16;           return hexDigits[d1] + hexDigits[d2];       }          public static String MD5Encode(String origin){           String resultString = null;               try {                                      resultString=new String(origin);                   MessageDigest md = MessageDigest.getInstance("MD5");                                      resultString.trim();                      resultString=byteArrayToHexString(md.digest(resultString.getBytes("UTF-8")));               }catch (Exception ex){}               return resultString;           }          public static void main(String[] args)        {                  String data = "189022881112011111118:09sz0000123456789987654321";           System.out.println(MD5Encode(data));       }  
[java] 
view plain
copy
public class ShortUrl {        public static void main(String[] args) {            String url = "http://www.sunchis.com";            for (String string : ShortText(url)) {                print(string);            }        }                public static String[] ShortText(String string){            String key = "XuLiang";                 //自定义生成MD5加密字符串前的混合KEY            String[] chars = new String[]{          //要使用生成URL的字符                "a","b","c","d","e","f","g","h",                "i","j","k","l","m","n","o","p",                "q","r","s","t","u","v","w","x",                "y","z","0","1","2","3","4","5",                "6","7","8","9","A","B","C","D",                "E","F","G","H","I","J","K","L",                "M","N","O","P","Q","R","S","T",                "U","V","W","X","Y","Z"            };                        String hex = MD5Encode(key + string);            int hexLen = hex.length();            int subHexLen = hexLen / 8;            String[] ShortStr = new String[4];                        for (int i = 0; i < subHexLen; i++) {                String outChars = "";                int j = i + 1;                String subHex = hex.substring(i * 8, j * 8);                long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16);                                for (int k = 0; k < 6; k++) {                    int index = (int) (Long.valueOf("0000003D", 16) & idx);                    outChars += chars[index];                    idx = idx >> 5;                }                ShortStr[i] = outChars;            }                        return ShortStr;        }                private static void print(Object messagr){            System.out.println(messagr);        }    }   
下面来看看程序部分:现在可以直接使用ShortText(url)方法,可以等到下面四组值:
[java] 
view plain
copy
ShortText("http://www.sunchis.com")[0];  //得到值:Jzyqma    ShortText("http://www.sunchis.com")[1];  //得到值:QBrMzm    ShortText("http://www.sunchis.com")[2];  //得到值:bQreM3    ShortText("http://www.sunchis.com")[3];  //得到值:VNBRna   
选取结果中四个值的任何一个值即可作为URL对应生成的短网址了。
超级谷歌
关注
关注
点赞
收藏
打赏
评论
URL短地址压缩算法-短网址映射
微博短地址原理解析 (Java实现)一种方法是调用第三方提供短址服务的接口来生成即可。一般他们提供接口或调用包。如:怎样调用百度短网址api?  http://www.baidu.com/search/dwz.html (无需授权即可调用)新浪短网址API接口(3月15日更新)新浪更新后的长网址转短网址官方API文档:http://ope
复制链接
扫一扫
专栏目录
C# URL短地址压缩算法及短网址原理解析
01-20
短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的sinaurl.cn等。
我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx
为什么要这样做的,原因我想有这样几点:
微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的UR
【短链接】——自己实现一个短网址服务
我爱吃土豆
09-23
5130
目录
前言
什么是短链接
为什么要用短链接(引用)
如何生成短链接
实现
代码
演示
前言
前段时间做支付的时候,要生成可供微信和支付宝扫描的支付二维码,二维码里存储的也就是一个链接,但是可能是因为链接比较长的缘故,总是被微信拦截。
然后就换成了微信官方的长链接转短链接,好不容易弄好了,发现支付宝扫的话会拦截,两家果真是水火不容。。。
有问题就解决问题呗,那我换成第三方的好...
参与评论
您还未登录,请先
登录
后发表或查看评论
【短链】如何生成短链(原理说明 + 如何实现一个短链服务器)
最新发布
大胡子老哥的博客
11-03
713
如何生成短链(原理说明 + 如何实现一个短链服务器),62进制转换的实现
短链接原理分析
Lisam Blog
03-29
555
参考链接: https://blog.csdn.net/weixin_37186559/article/details/84833108
为什么要用短链接?
原来的链接长度过长,发微博什么之类展示也不好看。比如下面这串:
https://www.baidu.com/s?wd=%E7%9F%AD%E9%93%BE%E6%8E%A5&rsv_spt=1&rsv_iqid=0x...
短链接设计和思考
新猿一马
02-16
544
什么是长链接、什么是短链接?
https://github.com/jack1liu/Java/这个地址一共33个字符,属于长链接。当然这个只是示例,真实场景会带有各种参数。
http://d.sb.com/U7eRz这个地址是上面的长链接地址经过处理得到的,一共21个字符,属于短链接。
有了长链接为啥需要短链接呢?
以发送营销短信为例子,每一条短信字符是有上限的。
如果使用长链接很容易超过单条短信上限,将变成两条短信,成本增加,用户体验也很差。
如果使用短链接,将大大减少字符数目,由于链接..
shortURL短地址压缩算法
u014028063的博客
11-22
1284
我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx
现在让你来设计TinyURL的实现,以下问题要怎么设计:
(1):域名后面的编码如何实现?
(2):对于已经映射过的一个URL,怎么查找已存在的TinyUrl?
(3):有10亿个url,一个服务上存不下,需要多台服务器,怎么设计实现
(4):让你来设计这样一个服务,最大的问题是什...
长地址,短地址与重定向
qq_43223115的博客
07-21
497
长地址,短地址与重定向
1. 为什么需要将长地址映射成短地址
一个长URL地址(PATH,各种参数和追踪标识)会很长,会受到字数限制,导致粘贴地址时漏掉部分数据,因此我们需要使用短地址。
2. 实现原理
① 将长地址与一个整数建立映射(一对多)
可以使用int64,保存映射关系。可以使用MySQL数据库,如果为了更好的并发存储,还可以使用NoSQL库或者数据分库分表。
CREATE database yang;
USE yang;
CREATE TABLE 'yang_table'(
'id' bigin
短URL服务的设计以及实现
CBeann的博客
08-21
465
短地址与长地址
架构:短址(short URL)原理及其实现(短地址|短url)
lisheng19870305的专栏
07-05
2043
前言:
最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。
介绍:
短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。
首先我们到 http://goo.gl/,然后把本文博客的地址http://blog.csdn.net/beiyeqingteng 输入进去,最后它会返回
短地址(ShortUrl)实例
superwind
06-15
3816
短地址,就是把长的URL转成短URL, 目前谷歌/新浪/百度/腾讯等都免费提供API服务。因调用次数限制或提供出去的url域名不是想要的,因此考虑自己实现。
短址本质上是实现了一个映射函数 f: X -> Y 。而这个映射函数必须同时具有两个特点:
1. 如果 x1 != x2, 则 f (x1) != f(x2);
2. 对于每一个 y, 能够找到唯一的一个 x 使得 f(
如何设计一个短URL地址系统
张维鹏的博客
11-01
1785
一、短URL系统的原理:
短URL系统的核心是将长的 URL 转化成短的 URL;在访问系统时,先使用短地址A访问短URL系统,由短URL系统映射到对应的长地址B,然后客户端再重定向(301或者302)到B网址,如下图所示:
二、短 URL 的好处:
1、链接变短,对于有长度限制的平台发文,可编辑的文字就变多了
2、短链接生成的二维码更易于识别,而长链接的二维码密集难识别
3、短链接更加简洁好看且安全,不暴露访问参数。
4、能规避关键词、域名屏蔽等手段
5、链接太长在...
c# 短链接生成
weixin_30950607的博客
12-02
707
c# 短链接生成
1 public static string GetShortUrl(string url)
2 {
3 //可以自定义生成MD5加密字符传前的混合KEY
4 string key = DateTime.Now.ToString();
5...
20191109 短链接技术
陈如水的专栏
11-09
535
短链接(Short Link)顾名思义就是长度比较短的网址。如:http:/ /mrw.so。早期,短链接主要应用在网站的图片上传中,上传网站通过特定的算法缩短 URL(Uniform Resource Locator,统一资源定位符)链接地址,达到减少代码字符数的目的。
自己的理解:把网址长度变短的技术,减少代码字符数。如何生成短的链接?短链接生成器。域名重定向技术。短链接压缩算法。
分享的...
短链接系统的设计与实现
一车面包人的博客
08-03
860
在部分存在字数限制的场景下(例如微博的140字限制和长短信拆分),如果填入很长的链接将占用可用的文本长度,需要将长链接转换为短链接。
一、功能分析
一个短链接服务对外仅需要暴露两个功能
短链生成:提交网址,返回生成的短链接
访问重定向:访问生成的短链接,能够重定向到原本的网址
此外由于短链接生成之后需要长期可用,需要使用数据库持久化存储。
下面对这两个要实现的功能进行更详细的分析
功能1:访问短链重定向
该功能比较简单,只需能够根据短链查询到长链接,可以是多对一或一对一的关系。
即给定一个短链,唯一确定
URL短地址压缩算法 微博短地址原理解析 (Java实现)
热门推荐
10-15
2万+
最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有不少网友在发帖求助,怎么实现Java版的短网址(ShortUrl)的算法。干脆一不做,二不休,参考了一下网上比较流行的PHP版短网址(ShortUrl)算法:再根据自己的理解,用Java实现了该
c#url拼接方法名_C# .Net实现Url地址重写(伪静态)的方法
weixin_32797081的博客
02-23
1004
URL重写简单原理:url重写是截取传入Web请求并自动将请求重定向到其他URL的过程。比如浏览器发来请求hostname/news/101.html,服务器自动将这个请求中定向为http://hostname/news/list.aspx?id=101。url重写的优点:缩短url,隐藏实际路径提高安全性;易于用户记忆和键入;易于被搜索引擎收录;实现URL重写的几个步骤:第一:下载MS的URLR...
免费url长网址缩短压缩工具评测,短链接在线生成器推荐。
l71468712的博客
12-30
2923
短链接是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。用于在短信、APP中进行推广或者,让同样长的文本中展示更多内容。接下来我们评测一下市面上流行的产品。
一、摩尔短链接
摩尔短链接提供安全的网址缩短、短网址生成服务及稳定的短网址API接口;具有稳定、快速、安全的特点,支持批量缩短、批量短网址还原、数据报表、开放API接口等服务。
摩尔短链接 - 免费短链接生成长链接缩短服务。
普通短链(长链接 直接转换成 短链接)
设备短链(同一短链,根据访客的不同设备指向不同的长链接)
城市短链(同一
震惊了:调用渣浪短网址服务(旧)生成短网址,小心掉坑
weixin_33913332的博客
02-24
208
2019独角兽企业重金招聘Python工程师标准>>>
...
教你如何将网址缩短
liwei128的博客
03-22
1349
很多时候链接太长记不住,如果能自定义链接多好,这时候怎么办?
只要大家留心之前收过的很多营销短信就会发现,这些短信内容中的链接都很短。而这些短信中的短链接是不需要技术处理的,直接使用短链接生成工具生成就可以。
怎样把长网址变短网址?
长网址缩短工具:c1n.cn(可自定义链接内容、带访问量统计功能)
C1N短网址服务平台
这个网站有什么用途?
它是专门提供网址缩短服务的高品质短网址生成系统。
它的作用非常简单,一句话就可以概括:最好用的免费短网址,随心所欲定制域名,定制网址,为您提供专业、稳定
以短链服务为例,探讨免AppKey、免认证、Ajax跨域调用新浪微博API
weixin_34409822的博客
08-29
129
新浪微博的API官方提供了很多种调用方式,支持编程的,归根结底就是两种:
1.基于Oauth协议,使用Open API。(http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)
2.使用Weibo JS-SDK(http://open.weibo.com/sdk/js )。
...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
超级谷歌
CSDN认证博客专家
CSDN认证企业博客
码龄17年
暂无认证
287
原创
3万+
周排名
87万+
总排名
308万+
访问
等级
2万+
积分
2276
粉丝
716
获赞
510
评论
979
收藏
私信
关注
热门文章
spring ioc原理(看完后大家可以自己写一个spring)
386913
Hadoop家族学习路线图
111281
Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
110505
(精)java.sql.SQLException: No more data to read from socket
71113
什么是元数据 (MetaData)
62208
分类专栏
JAVA
145篇
架构和设计模式
62篇
开源技术(如Struts/spring/Hibernate等)
72篇
云计算/物联网
3篇
搜索引擎与数据挖掘
3篇
集群&负载均衡
4篇
数据库/NoSql
43篇
API&开放平台
1篇
Linux/Uinx等操作系统
6篇
工作流&业务规则&策略&推理
5篇
经典文章
22篇
开源应用系统
11篇
大数据分析
6篇
系统优化
11篇
Web开发技术相关
49篇
WebService
6篇
javaScript
19篇
软件工程管理
24篇
中间件&WOA&SAP&SOA
7篇
XML
5篇
安全
4篇
非技术文章
18篇
所见即所得
2篇
IT其他技术
14篇
管理知识
2篇
电子商务
3篇
商业智能
SSO
3篇
异常
4篇
算法
1篇
最新评论
Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
qq_2269440032:
写的辣鸡,什么狗屁的排版
常见规则引擎技术
迟到的月亮:
推荐一个新开源的规则引擎-ice
新的编排思想,轻量级,高性能,提供后台操作页面
文档:http://waitmoon.com/docs
避免在循环体中创建对象
WorldWelcome:
我尝试用java deCompiler反编译,发现还是会放在外边
spring ioc原理(看完后大家可以自己写一个spring)
coffee_babe:
楼主,可以推荐下Spring的相关书籍吗?
spring ioc原理(看完后大家可以自己写一个spring)
码农阳神:
人近22了,还没有对象,求spring给注入一个
我是22大龄男青年,欲求18岁漂亮女青年
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
延时任务队列-单机支持每秒10万延时消息高效触发(可部署多台提供更高并发)
spring5.X源码构建
Spring+iBatis+Atomikos实现JTA事务
2018年1篇
2017年2篇
2015年22篇
2014年53篇
2013年65篇
2012年85篇
2011年56篇
2010年9篇
2009年45篇
2008年23篇
2007年13篇
2006年119篇
目录
目录
分类专栏
JAVA
145篇
架构和设计模式
62篇
开源技术(如Struts/spring/Hibernate等)
72篇
云计算/物联网
3篇
搜索引擎与数据挖掘
3篇
集群&负载均衡
4篇
数据库/NoSql
43篇
API&开放平台
1篇
Linux/Uinx等操作系统
6篇
工作流&业务规则&策略&推理
5篇
经典文章
22篇
开源应用系统
11篇
大数据分析
6篇
系统优化
11篇
Web开发技术相关
49篇
WebService
6篇
javaScript
19篇
软件工程管理
24篇
中间件&WOA&SAP&SOA
7篇
XML
5篇
安全
4篇
非技术文章
18篇
所见即所得
2篇
IT其他技术
14篇
管理知识
2篇
电子商务
3篇
商业智能
SSO
3篇
异常
4篇
算法
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
超级谷歌
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值