如何快速实现稳定可靠的加密访问短网址功能—— 微博短网址

使用场景

微博和Twitter都有140字数的限制,如果分享一个长网址,很容易就超出限制,发布出去。短网址服务可以把一个长网址变成短网址,方便在社交网络上传播。当然有些网赚项目也是通过短网址来推广的。

实现方式大概有两种:

一种是存数据库中,取自增ID,进行10 -> 62进制转换,结果为短网址,访问时再从数据库取得真实地址。
另一种是网上流传较广的,取HASH值的前N位,碰撞,不重复就为短网址。

我们注意到,其实不管上面哪种方式都需要本地建数据库存储,如果量大的话或者被恶意攻击的话,存储和性能等方面都存在很大问题。那么能不能使用大公司已有的基础设施来定做我们自己的短网址呢?

 

我的需求是:用户访问短网址,需要输入访问密码才能够跳到真实链接。

因为新浪短网址并没有提供加密访问功能,但是可以利用新浪的第三方开放平台api来实现自己的新浪短网址。

老板催着我干活了,我先贴一下markdown文档:


## 网址缩短

`GET /short_url/shorten?url=urlencode(要缩短的网址)&pwd=访问密码`

``` js
Response
{
    "err_code": 0,
    "err_msg": "OK",
    "short_url": "http://t.cn/Rp7YRQG"
}
```


## 网址还原

`GET /short_url/expand?url=urlencode(要还原的网址)&pwd=访问密码`

``` js
Response
{
    "err_code": 0,
    "err_msg": "OK",
    "long_url": "https://www.baidu.com"
}
```


## 加密链接的生成

处理网址缩短请求时,首先检测pwd是否为空,如果pwd为空,long_url即为原始链接,
如果pwd不为空,那么需要将原始链接按如下步骤处理,然后将得到的long_url交于新浪API处理:

` long_url: https://weibo.ws/short_url/check_pwd?url=base64UrlEncode(ciphertext) `

```
ciphertext = AES(jsonbody)
jsonbody = {"long_url": "https://www.baidu.com", "pwd": "访问密码"}
```


## 加密链接的访问

`GET /short_url/check_pwd?url=xxx`

```
用户访问 http://t.cn/Rp7YRQG 时,跳转到 /short_url/check_pwd?url=xxx,用户在页面输入密码后,
POST请求 /short_url/check_pwd?url=xxx&pwd=访问密码 。
服务器在收到请求后,先解码xxx获取里面的'pwd'字段,若pwd一致后,则返回原始的long_url
```

``` js
Response
{
    "err_code": 0,
    "err_msg": "OK",
    "long_url": "https://www.baidu.com"
}
```

 

整个实现原理全部讲完了,最后贴一下项目地址 微博短网址 https://weibo.ws ,欢迎根据上面的API文档使用。

备注:为什么不用网上第三方的,之前听业内朋友讲过,第三方的短网址会偷偷进行流量劫持,就是半夜偷偷把你的短链接跳到其他的广告页面,所以我的短链接直接选了新浪自己的 t.cn 开头,这样无法进行流量劫持。
 

你可能感兴趣的:(其他,短网址,新浪短网址,微博短网址)