您好,登錄后才能下訂單哦!
HTTP1.1協議規定了web地址默認保持長連接(HTTP persistent connection ,也有翻譯為持久連接),所以在web服務端獲取到的鏈接都只能是原始長連接。
短連接(short-url),顧名思義就是在形式上比較短的鏈接,可能很多朋友都已經不再陌生,特別是在微博應用中十分普遍,比如,當我們在騰訊、新浪微博發微博時有時發很長的網址連接,但由于微博只限制140個字,所以微博就自動把您發的長連接給轉換成短連接了。無可否認在微博和手機短信提醒等限制字數的地方來使用短網址,的確是一個不錯的方案。
微信短鏈接接口:http://lnurl.cn/weixin/short?link=http://www.baidu.com
1、在線使用
將API地址中?"http://www.baidu.com"?的部分換成自己的長連接,然后復制完整地址前往瀏覽器中粘貼打開就能生成了。(簡而言之就是更換url后面的鏈接)
2、請求接口
如果你的量比較大,一條一條轉換太麻煩了,需要批量生成的話,可以將API接口對接到程序中請求生成,請求示例如下。
?
PHP請求示例:
$url?=?'http://www.baidu.com'; $api_url?=?'http://lnurl.cn/sina/short-api?url_long=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/sina/short-api?url_long=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?=?'/sina/short-api' method?=?'GET' querys?=?'url_long=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、調用API接口時,只需將 “http://www.baidu.com”換成需要縮短的長鏈接即可。
2、接口支持鏈接中帶參數,但要注意的是當鏈接中出現 & 符號時,請用 %26 代替(或者使用url編碼),否則參數可能會丟失。
3、更換鏈接時,必須要以http(s)://開頭,否則可能會導致短網址生成失敗或者生成的短網址無法跳轉訪問原網站。
?
1、長鏈接轉換后,為什么結尾的參數丟失了?
答:因為長鏈接中含有特殊字符,需要將url編碼后再使用接口生成。
2、接口沒有返回結果,是什么情況?
答:有些時候接口返回數據會有延遲,超時未返回即生成失敗,也就不會返回結果;或者是因為原鏈接被封了。
3、生成的短連接有效期是多久?有沒有訪問次數限制?
答:生成的短連接(t.cn&url.cn)是永久有效的,沒有點擊次數限制,可以放心使用。
?
算法一
1) 將長網址md5生成32位簽名串,分為4段, 每段1個字節(即8位);
2) 對這四段循環處理, 取4個字節(32位), 將他看成16進制串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;
3) 這30位分成6段, 每5位的數字作為字母表的索引取得特定字符, 依次進行獲得6位字符串;
4) 總的md5串可以獲得4個6位串; 取里面的任意一個就可作為這個長url的短url地址;
算法二
把數字和字符組合做一定的映射,就可以產生唯一的字符串,如第62個組合就是aaaaa9,第63個組合就是aaaaba,再利用洗牌算法,把原字符串打亂后保存,那么對應位置的組合字符串就會是無序的組合。
把長網址存入數據庫,取返回的id,找出對應的字符串,例如返回ID為1,那么對應上面的字符串組合就是bbb,同理 ID為2時,字符串組合為bba,依次類推,直至到達62種組合后才會出現重復的可能,所以如果用上面的62個字符,任意取6個字符組合成字符串的話,你的數據存量達到500多億后才會出現重復的可能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。