Go短链接服务分析

概览

应用场景

  1. 微信文章分享,访问1次后失效
  2. 文章分享,需要密码访问
  3. 以二维码访问分享链接
  4. 访问城市,设备统计
  5. 分享后能保留#后长尾路由

功能列表

  1. 允许给短网址加密码,分享更私密
  2. 短网址只想被人访问1次?2次?若干次?都可以,只要你指定就行
  3. 接入到你的应用系统中?开放API
  4. 二维码展示
  5. 访客统计的来自哪个城市?用什么上网?操作系统是什么?IP是什么?用的什么浏览器等等。

对象列表

gox_url_item

名称 描述
ID guid
TYPE 301跳转,302跳转,302直达,js跳转,meta跳转
SHORT_CODE 编号
URL_LONG 长网址
URL_CALLBACK 回调地址
COUNT_ALLOW 允许次数
COUNT_VISiT 访问次数

API列表

短网址生成

Get url

http://dev.xxx.com/create?applicationId=123?url_long=[长网址]&url_callback=[http://dev.xxx.com/owx/{shortCode}]&time=1&expires=1141889120&password=000000

  1. applicationId参数为应用id,可为空
  2. times参数是可分享次数
  3. auth=1 参数为启用密码访问
  4. applicationId 为应用id可为空
  5. url_callback 为跳转回调地址,需要在回调地址中通过api 获取回调具体地址
  6. url_long 访问地址
  7. expires这个参数的值是一个UNIX时间(自UTC时间1970年1月1号开始的秒数,详见wiki),用于标识该URL的超时时间。如果OSS接收到这个URL请求的时候晚于签名中包含的Expires参数时,则返回请求超时的错误码。例如:当前时间是1141889060,开发者希望创建一个60秒后自动失效的URL,则可以设置Expires时间为1141889120。
  8. restype 返回类型 json 返回对象,qrcode 返回直接返回二维码
  9. logo qrocde中间的logo nbeport 返回电子口岸 logo , nbciq 返回宁波国检logo

示例1 生成短链接
http://localhost/go/create?applicationId=123&url_long=http://www.baidu.com&url_callback=http://www.baidu.com/{shortCode}&time=1&expires=1141889120&password=000000

示例2 生成短链接二维码
http://eas.nbeport.com/go/create?applicationId=0d4f799b-7a76-4292-a485-768ad69e61f5&url_long=9d6b973a-0187-4858-83e9-ff2b6d37b2f6&restype=qrcode

返回结果

{"ShortCode":"7J7fIn","ShortUrl":"http://dev.www.com/go/7J7fIn"}

示例
http://localhost/go/create?applicationId=123&url_long=http%3A%2F%2Fdev.xx.com%2Fowx%2F%23%2Ftab%2Fsend&url_callback=http%3A%2F%2Fdev.xx.com%2Fowx%2Fhome%2F{0}&auth=1

短网址获取信息

请求参数

get url:http://dev.xxx.com/go/get/{shortCode}

返回结果

{"ShortCode":"7J7fIn","CallBackUrl":"http://dev.xxx.com/owx/{0}","LongUrl":"http://dev.xxx.com/nqp/#/tab/send","Expires":1234312111,"Times":-1,"Password":"","VistCount":0}

短网址直接访问

浏览器中直接访问 http://dev.xxx.com/go/{shortCode}

短网址二维码显示

http://dev.xxx.com/go/{shortCode}/qrcode/{pix}

应用示例

301跳转

  1. 使用 短网址生成 生成短网址
  2. 分享短网址
  3. 短网址将重定向到目标网址

callback调用

  1. 使用 短网址生成 生成短网址
  2. 分享短网址
  3. 短网址将重定向到回调地址
  4. 回调地址通过[短网址获取信息]接口获取配置信息
  5. 业务逻辑后续处理

Key生成算法

  1. 将长网址md5生成32位签名串,分为4段, 每段8个字节;
  2. 对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
  3. 这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
  4. 总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;

`public class UrlHelper {
public static string[] Create(string url)
{
//可以自定义生成MD5加密字符传前的混合KEY
string key = "mykey1";
//要使用生成URL的字符
string[] chars = new string[]{
"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"};
        //对传入网址进行MD5加密
        string hex = Md5Hash(key + url);
        string[] resUrl = new string[4];
        for (int i = 0; i < 4; i++)
        {
            //把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算
            int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16);
            string outChars = string.Empty;
            for (int j = 0; j < 6; j++)
            {
                //把得到的值与0x0000003D进行位与运算,取得字符数组chars索引
                int index = 0x0000003D & hexint;
                //把取得的字符相加
                outChars += chars[index];
                //每次循环按位右移5位
                hexint = hexint >> 5;
            }
            //把字符串存入对应索引的输出数组
            resUrl[i] = outChars;
        }
        return resUrl;
    }
    /// <summary>
    /// 32位MD5加密
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    private static string Md5Hash(string input)
    {
        MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
        byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }
}`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容