短网址生成接口(API)
1、新浪:http://lnurl.cn/tcn-api.json?key=hdgsp3j2r&url=http://www.baidu.com
2、腾讯:http://lnurl.cn/url-api.json?key=hdgsp3j2r&url=http://www.baidu.com
HTTP协议和TCP/IP协议的关系
HTTP的长网址、短网址本质上是TCP长网址和短网址。
HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。
HTTP协议是无状态的
协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。
长网址、短网址
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持网址特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive。
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长网址需要客户端和服务端都支持长网址。
长网址、短网址的优缺点
1、长网址优缺点:
长网址可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长网址。
不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。
在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候。
这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。
2、短网址优缺点:
短网址对于服务器来说管理较为简单,存在的网址都是有用的网址,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
接口请求说明
1、请求方式
POST
2、请求参数
参数 | 必选 | 类型 | 说明 |
key | 是 | string | 注册登录获取 |
3、参数说明
上文提到的三种格式的接口是免费公开的,所以无需用到key参数即可直接调用。但有请求次数限制,超出限制,接口会返回“user dose not have resource to register long term short url”。
无限制接口是需要注册获取授权key的,key是请求接口时代表用户的唯一身份。用来做鉴权使用,请勿随意泄露key。
4、key申请步骤
1、进入 http://lnurl.cn/,点击获取API接口。
2、注册创建唯一用户id后前往接口管理控制台。
3、获取接口授权key,key就是请求接口的唯一识别。
4、复制API接口地址,就可以请求生成了。
5、接口请求说明
① 在线使用
上文提到的两个接口均为2020年最新的长网址转短网址接口,无需授权key即可正常请求。如果不想与他们共用一个接口的话,建议去注册个授权key。
在线使用,只需将 “http://www.baidu.com” 换成自己需要缩短的长网址,然后复制整串链接前往浏览器打开即可生成相应的短网址。
② 请求接口
如果懂技术,或者嫌在线生成麻烦的朋友,不建议用在线生成,因为比较麻烦,耗时间,建议直接接入接口,程序请求接口生成。
6、接口请求示例
PHP请求示例:
$url = 'http://www.baidu.com'; $api_url = 'http://lnurl.cn/tcn-api.json?key=hdgsp3j2r&url=http://www.baidu.com; $short_url = file_get_contents($api_url); echo $short_url;
Java请求示例:
public static void main(String path[]) throws Exception { URL u = new URL("http://lnurl.cn/tcn-api.json?key=hdgsp3j2r&url=http://www.baidu.com"); InputStream in = u.openStream(); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { byte buf[] = new byte[1024]; int read = 0; while ((read = in .read(buf)) > 0) { out.write(buf, 0, read); } } finally { if ( in != null) { in .close(); } } byte b[] = out.toByteArray(); System.out.println(new String(b, "utf-8")); }
Python请求示例:
import urllib, urllib2, sys host = 'http://lnurl.cn' path = '/tcn-api.json' method = 'GET' querys = 'link=http%3A%2F%2Fwww.baidu.com' bodys = {} url = host + path + '?' + querys request = urllib2.Request(url) response = urllib2.urlopen(request) content = response.read() if (content): print(content)
温馨提示:
1、请求接口时,要将参数后面对应的 “http://www.baidu.com” 网址换成自己需要缩短的长网址。
2、参数链接支持有参数,但要注意的是当链接中出现 & 符号时,请用 %26 代替(或者使用url编码),否则参数可能会丢失。
3、更换url时,必须要以http(s)://开头,否则可能会导致短网址生成失败或者生成的短网址无法跳转访问原网站。
常见问答:
1、长地址转换后,为什么结尾的参数丢失了?
答:因为长链接中含有特殊字符,需要将url编码后再使用接口生成。
2、接口请求没有返回结果,是什么情况?
答:有些时候接口返回数据会有延迟,超时未返回即生成失败,也就不会返回结果;或者是因为原链接被封了。
3、生成的短域名有效期是多久?有没有访问次数限制?
答:生成的短网址是永久有效的,没有点击次数限制,可以放心使用。