HTTP的長連接和短連接轉(zhuǎn)換接口(API)

什么是長連接烁巫?

HTTP1.1協(xié)議規(guī)定了web地址默認(rèn)保持長連接(HTTP persistent connection 奢人,也有翻譯為持久連接)闸昨,所以在web服務(wù)端獲取到的鏈接都只能是原始長連接风纠。

什么是短連接况鸣?

短連接(short-url),顧名思義就是在形式上比較短的鏈接竹观,可能很多朋友都已經(jīng)不再陌生镐捧,特別是在微博應(yīng)用中十分普遍,比如臭增,當(dāng)我們在騰訊懂酱、新浪微博發(fā)微博時有時發(fā)很長的網(wǎng)址連接,但由于微博只限制140個字誊抛,所以微博就自動把您發(fā)的長連接給轉(zhuǎn)換成短連接了列牺。無可否認(rèn)在微博和手機短信提醒等限制字?jǐn)?shù)的地方來使用短網(wǎng)址,的確是一個不錯的方案。

長連接和短連接轉(zhuǎn)換接口

新浪短鏈接接口:http://lnurl.cn/sina/short-api?link=http://www.baidu.com

微信短鏈接接口:http://lnurl.cn/weixin/short?link=http://www.baidu.com


接口獲取流程

1祭椰、打開短連接接口獲取地址:http://lnurl.cn/api

2、進入頁面后他嚷,點擊“立即開通”獲取接口授權(quán)key

3默刚、注冊賬后獲取接口key

4、獲取接口


接口使用說明:

1逃魄、在線使用

將API地址中?"http://www.baidu.com"?的部分換成自己的長連接荤西,然后復(fù)制完整地址前往瀏覽器中粘貼打開就能生成了。(簡而言之就是更換url后面的鏈接)

2伍俘、請求接口

如果你的量比較大邪锌,一條一條轉(zhuǎn)換太麻煩了,需要批量生成的話癌瘾,可以將API接口對接到程序中請求生成觅丰,請求示例如下。


PHP請求示例:

  1. $url?=?'http://www.baidu.com';
  2. $api_url?=?'http://lnurl.cn/sina/short-api?url_long=http://www.baidu.com;
  3. $short_url?=?file_get_contents($api_url);
  4. echo?$short_url;


Java請求示例:

  1. public?static?void?main(String?path[])?throws?Exception?{
  2. URL?u?=?new?URL("http://lnurl.cn/sina/short-api?url_long=http://www.baidu.com");
  3. InputStream?in?=?u.openStream();
  4. ByteArrayOutputStream?out?=?new?ByteArrayOutputStream();
  5. try?{
  6. byte?buf[]?=?new?byte[1024];
  7. int?read?=?0;
  8. while?((read?=?in?.read(buf))?>?0)?{
  9. out.write(buf,?0,?read);
  10. }
  11. }?finally?{
  12. if?(?in?!=?null)?{
  13. in?.close();
  14. }
  15. }
  16. byte?b[]?=?out.toByteArray();
  17. System.out.println(new?String(b,?"utf-8"));
  18. }


Python請求示例:

  1. import?urllib,?urllib2,?sys
  2. host?=?'http://lnurl.cn'
  3. path?=?'/sina/short-api'
  4. method?=?'GET'
  5. querys?=?'url_long=http%3A%2F%2Fwww.baidu.com'
  6. bodys?=?{}
  7. url?=?host?+?path?+?'?'?+?querys
  8. request?=?urllib2.Request(url)
  9. response?=?urllib2.urlopen(request)
  10. content?=?response.read()
  11. if?(content):
  12. print(content)


注意事項:

1妨退、調(diào)用API接口時妇萄,只需將 “http://www.baidu.com”換成需要縮短的長鏈接即可。

2咬荷、接口支持鏈接中帶參數(shù)冠句,但要注意的是當(dāng)鏈接中出現(xiàn) & 符號時,請用 %26 代替(或者使用url編碼)幸乒,否則參數(shù)可能會丟失懦底。

3、更換鏈接時罕扎,必須要以http(s)://開頭聚唐,否則可能會導(dǎo)致短網(wǎng)址生成失敗或者生成的短網(wǎng)址無法跳轉(zhuǎn)訪問原網(wǎng)站。


常見問題:

1腔召、長鏈接轉(zhuǎn)換后杆查,為什么結(jié)尾的參數(shù)丟失了?

答:因為長鏈接中含有特殊字符宴咧,需要將url編碼后再使用接口生成根灯。

2、接口沒有返回結(jié)果掺栅,是什么情況烙肺?

答:有些時候接口返回數(shù)據(jù)會有延遲,超時未返回即生成失敗氧卧,也就不會返回結(jié)果桃笙;或者是因為原鏈接被封了。

3沙绝、生成的短連接有效期是多久搏明?有沒有訪問次數(shù)限制鼠锈?

答:生成的短連接(t.cn&url.cn)是永久有效的,沒有點擊次數(shù)限制星著,可以放心使用购笆。


算法原理

算法一

1) 將長網(wǎng)址md5生成32位簽名串,分為4段, 每段1個字節(jié)(即8位);

2) 對這四段循環(huán)處理, 取4個字節(jié)(32位), 將他看成16進制串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;

3) 這30位分成6段, 每5位的數(shù)字作為字母表的索引取得特定字符, 依次進行獲得6位字符串;

4) 總的md5串可以獲得4個6位串; 取里面的任意一個就可作為這個長url的短url地址;

算法二

把數(shù)字和字符組合做一定的映射,就可以產(chǎn)生唯一的字符串,如第62個組合就是aaaaa9,第63個組合就是aaaaba,再利用洗牌算法,把原字符串打亂后保存虚循,那么對應(yīng)位置的組合字符串就會是無序的組合同欠。

把長網(wǎng)址存入數(shù)據(jù)庫,取返回的id,找出對應(yīng)的字符串,例如返回ID為1,那么對應(yīng)上面的字符串組合就是bbb,同理 ID為2時横缔,字符串組合為bba,依次類推,直至到達(dá)62種組合后才會出現(xiàn)重復(fù)的可能铺遂,所以如果用上面的62個字符,任意取6個字符組合成字符串的話茎刚,你的數(shù)據(jù)存量達(dá)到500多億后才會出現(xiàn)重復(fù)的可能襟锐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膛锭,隨后出現(xiàn)的幾起案子粮坞,更是在濱河造成了極大的恐慌,老刑警劉巖泉沾,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捞蚂,死亡現(xiàn)場離奇詭異,居然都是意外死亡跷究,警方通過查閱死者的電腦和手機姓迅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俊马,“玉大人丁存,你說我怎么就攤上這事〔裎遥” “怎么了解寝?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艘儒。 經(jīng)常有香客問我聋伦,道長,這世上最難降的妖魔是什么界睁? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任觉增,我火速辦了婚禮,結(jié)果婚禮上翻斟,老公的妹妹穿的比我還像新娘逾礁。我一直安慰自己,他們只是感情好访惜,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布嘹履。 她就那樣靜靜地躺著腻扇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砾嫉。 梳的紋絲不亂的頭發(fā)上幼苛,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音焕刮,去河邊找鬼蚓峦。 笑死,一個胖子當(dāng)著我的面吹牛济锄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霍转,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荐绝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了避消?” 一聲冷哼從身側(cè)響起低滩,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岩喷,沒想到半個月后恕沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡纱意,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年婶溯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偷霉。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡迄委,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出类少,到底是詐尸還是另有隱情叙身,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布硫狞,位于F島的核電站信轿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏残吩。R本人自食惡果不足惜财忽,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望世剖。 院中可真熱鬧定罢,春花似錦、人聲如沸旁瘫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惠况,卻和暖如春遭庶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稠屠。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工峦睡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人权埠。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓榨了,卻偏偏與公主長得像,于是被迫代替她去往敵國和親攘蔽。 傳聞我的和親對象是個殘疾皇子龙屉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,101評論 1 32
  • 自新浪關(guān)閉了App Key之后,很多商家尋找新的新浪短鏈接短網(wǎng)址生成器满俗,因為現(xiàn)在短鏈接短網(wǎng)址已經(jīng)廣泛應(yīng)用于各類...
    ec1ee0bc88b7閱讀 3,209評論 0 0
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時转捕,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,317評論 0 9
  • Knee pressing and crouching
    溫州夏記者閱讀 263評論 2 4
  • 親愛的自己唆垃,有多久沒有好好靜下來給自己一個心靈擁抱了五芝,我知道你過得很不容易,一路走來只有你自己知道經(jīng)歷過什么...
    小志_2cc2閱讀 311評論 1 3