制服中文字幕在线一区,国产精品线上观看,天堂在线天堂在线视频,欧美日韩国产色综合一二三四

    1. <acronym id="udyir"></acronym>

          首頁(yè) > 產(chǎn)業(yè) > 電子競(jìng)技

          有沒有免費(fèi)的短網(wǎng)址工具?

          我是@程序員小助手, 本文從技術(shù)角度,對(duì)短網(wǎng)址進(jìn)行深度挖掘。

          前言網(wǎng)上已經(jīng)有產(chǎn)品,用著還不錯(cuò)。可是,作為程序員,從零開始造輪子,開發(fā)一個(gè)屬于自己的短網(wǎng)址服務(wù)器,這想法amazing!

          通過本文,讀者可明白短網(wǎng)址的技術(shù)原理,以及通過Go語言實(shí)現(xiàn)一個(gè)短網(wǎng)址服務(wù)。

          簡(jiǎn)明教程短網(wǎng)址為什么存在?

          微博等產(chǎn)品的興起,活躍了網(wǎng)上的社交圈內(nèi)大多數(shù)用戶。但是微博一般有140字限制,如果不轉(zhuǎn)發(fā),單純?cè)u(píng)論文字,再加上一段網(wǎng)址,極有可能超過限制而被截?cái)唷?/p>

          短網(wǎng)址應(yīng)運(yùn)而生,用較短的一個(gè)字符串,替換較長(zhǎng)的一個(gè)字符串,從觀感上講,效果要友好的多。

          從技術(shù)原理上說,短網(wǎng)址是一個(gè)hash表,用于映射兩個(gè)字符串的對(duì)應(yīng)關(guān)系。

          使用鍵,找到對(duì)應(yīng)的值,重定向進(jìn)行訪問,就完成了整個(gè)流程。

          短網(wǎng)址算法短網(wǎng)址的一般結(jié)構(gòu),比如新浪的 SwuTjn,其中后端的一段6位字符串,就是用來唯一標(biāo)記一條記錄的ID。那么,使用什么算法,可以生成一條無重復(fù)的ID呢?

          使用通用的做法,使用 0-9 A-Z a-z 一共62個(gè)字符,我們看使用hash鍵位數(shù)分別有多少種排列組合情況。

          1位:pow(62,1) = 62 種

          2位:pow(62,2) = 3844 種

          3位:pow(62,3) = 238328 種

          4位:pow(62,4) = 14776336 種

          5位:pow(62,5) = 916132832 種

          6位:pow(62,6) = 種

          一般情況下,6個(gè)字符,就足夠使用了,共計(jì)568億種可能。

          還有一種情況是,用原網(wǎng)址字符串的MD5值,共計(jì)32位,然后通過切分為4段,分別按位與運(yùn)算,并裁剪到30位。間隔5位選出該位的字符作為該段索引,共有6位。但是這種做法也有幾率發(fā)生重復(fù),也不直觀。

          因此本文使用第一種算法生成鍵ID。

          工具準(zhǔn)備分析短網(wǎng)址的特性,包含以下項(xiàng)目:

          唯一性:鍵需要全局唯一時(shí)效性:鍵需要有過期時(shí)間目標(biāo)網(wǎng)址唯一,如果重復(fù),則自動(dòng)返回既有的鍵??紤]到上述情形,我們使用redis存儲(chǔ)這些對(duì)應(yīng)關(guān)系。使用Gin框架作為路由和控制器,提供對(duì)外的API訪問。

          核心函數(shù)計(jì)算機(jī)中常見的2進(jìn)制,8進(jìn)制,10進(jìn)制,16進(jìn)制,我們此處需要使用62個(gè)字符,循環(huán)表示一個(gè)整數(shù),那么可稱之為62進(jìn)制。

          下面使用go語言實(shí)現(xiàn)這個(gè)函數(shù),用于將任意的整數(shù)(uint64)轉(zhuǎn)換為(0-9A-Za-z)的字符串。

          需要注意,基礎(chǔ)的方法,就是循環(huán)取余數(shù),根據(jù)進(jìn)制字典,索引相應(yīng)的字符,然后將各個(gè)余數(shù)拼接出來,就是結(jié)果。

          這個(gè)計(jì)算方法,與2進(jìn)制,8進(jìn)制,原理是相同的。

          由于字典比較長(zhǎng),有62個(gè)鍵值對(duì),我們僅列出一部分。

          上述函數(shù)的轉(zhuǎn)換結(jié)果,類似于 6489264001 = 75ai0p

          功能規(guī)劃下面是對(duì)于系統(tǒng)路由,創(chuàng)建短鏈接,以及使用短鏈接訪問目標(biāo)網(wǎng)址的方法。

          1 - 規(guī)劃路由

          路由比較簡(jiǎn)單,一共2個(gè),一個(gè)POST方法,生成短鏈接;一個(gè)是GET方法,訪問短鏈接。

          代碼如下:

          2 - 引入redis并初始化

          為了方便演示,我們使用redis存儲(chǔ)鍵值,并設(shè)置expire時(shí)間。

          github.com/gin-gonic/gin github.com/go-redis/redis/v7我們使用go-redis提供的接口操作redis數(shù)據(jù)庫(kù)。

          下面是全局的 redis.Client

          對(duì)象生成,和初始化函數(shù)。

          這樣做的好處是,我們?nèi)侄伎梢允褂米兞?rdb 調(diào)用方法操作redis鍵值。

          3 - 實(shí)現(xiàn)POST路由方法:add

          本函數(shù)用于接收form表單數(shù)據(jù),生成一個(gè)全局唯一的 hash ,作為鍵,存入redis,設(shè)置值和過期時(shí)間。

          代碼如下:

          本段我們使用了一個(gè) getCounter 函數(shù),這是設(shè)置在redis內(nèi)的鍵,將其每次請(qǐng)求創(chuàng)建的時(shí)候,自增+1,可保證無重復(fù)。根據(jù)這個(gè)計(jì)數(shù)器,我們調(diào)用 helper的 DecToAny 方法,將其轉(zhuǎn)化為62進(jìn)制的字符串,作為全局唯一的 hash 值。

          下圖是 getCounter 的定義:

          特別注意的是,helper包,就是我們?cè)凇昂诵暮瘮?shù)”部分定義的函數(shù)。在主函數(shù)體內(nèi)引用。

          4 - 實(shí)現(xiàn)GET方法:visit

          本函數(shù)主要用于使用上一節(jié)接口生成的短鏈接,進(jìn)行訪問,并自動(dòng)重定向到目標(biāo)網(wǎng)址。

          代碼如下:

          對(duì)于不存在的短鏈接,或者redis獲取失敗,返回錯(cuò)誤信息。

          如果存在,使用 301 = StatusMovedPermanently 狀態(tài)碼重定向到目標(biāo)地址。

          測(cè)試我們使用curl工具,測(cè)試上述兩個(gè)接口。

          首先,使用POST表單提交數(shù)據(jù):

          curl -s -X POST -d target= -d expire=600

          上述方法,我們提交了兩個(gè)參數(shù),命中路由之后,會(huì)訪問上一節(jié)第3條的add方法,并生成一個(gè)短鏈接網(wǎng)址。返回JSON格式數(shù)據(jù)如下:

          {message:ok,short_url:75ai0r,status:1}

          其中,short_url 就是短網(wǎng)址。

          接著,我們?cè)谑褂胏url訪問這個(gè)鏈接,看是否發(fā)生重定向。截圖如下:

          可以看到,執(zhí)行了301重定向,并給出了目標(biāo)網(wǎng)址,與我們上述表單想要?jiǎng)?chuàng)建的地址一致。

          最后,故障測(cè)試。訪問一個(gè)不存在的hash,看是否排除異常信息。截圖如下:

          可以看到,執(zhí)行了錯(cuò)誤返回信息。

          結(jié)語以上我們使用GO語言框架Gin實(shí)現(xiàn)了兩個(gè)路由,并使用redis管理短鏈接。核心函數(shù)使用helper包管理,經(jīng)過測(cè)試,實(shí)現(xiàn)了短網(wǎng)址的功能。

          以上代碼在本地測(cè)試通過,也可部署到線上服務(wù)器對(duì)外開發(fā)端口,提供服務(wù),效果是一樣的。

          希望通過這個(gè)流程,使大家對(duì)于短網(wǎng)址的知識(shí),有一些了解,并能根據(jù)自身的編程能力,創(chuàng)作出更好用的短網(wǎng)址服務(wù)。

          Happy coding :-)

          【本文由 @程序員小助手 發(fā)布,持續(xù)分享編程與程序員成長(zhǎng)相關(guān)的內(nèi)容,歡迎關(guān)注】

          (1)公主連結(jié)wiki:

          有的,看題主的使用場(chǎng)景。根據(jù)不同的需求場(chǎng)景需要制定不同的方案。人工可操作的情況下基本上都是免費(fèi)的。但是需要自己一個(gè)一個(gè)輸入長(zhǎng)鏈接地址,然后轉(zhuǎn)成短連接,自己再做好備注說明。常用的有百度短網(wǎng)址生成工具(,提供了API,但是要收費(fèi))、新浪短網(wǎng)址生成工具(,免費(fèi),但是沒提供API?),屬于那種打開網(wǎng)站直接可以生成的,簡(jiǎn)單快捷。

          短網(wǎng)址常用場(chǎng)景:

          二維碼推廣營(yíng)銷在這個(gè)二維碼大行其道的世界,如果你用一個(gè)長(zhǎng)鏈接生成了二維碼,那么二維碼就會(huì)過密,將會(huì)嚴(yán)重影響識(shí)別的成功率和速度,這個(gè)時(shí)候?qū)⒛愕拈L(zhǎng)鏈接生成短連接,再用短連接生成二維碼,效果就完全不一樣了。這個(gè)也比較好實(shí)驗(yàn),網(wǎng)上隨便找一個(gè)比較長(zhǎng)的網(wǎng)址,然后用第三方二維碼生成網(wǎng)站(草料二維碼)生成一下,再用對(duì)應(yīng)的短連接生成一個(gè)二維碼,掃描實(shí)驗(yàn)一下效果就知道了。

          隱藏自己的長(zhǎng)鏈接鑒于安全的考慮,推廣出去的短連接一般人根本看不出來代表的意思,如果再用上匿名短網(wǎng)址,瀏覽器里面也看不到真實(shí)的鏈接地址。

          短信營(yíng)銷我們經(jīng)常會(huì)收到一些營(yíng)銷短信,里面會(huì)附帶上一個(gè)短連接,試想一下,如果是一個(gè)長(zhǎng)鏈接,不僅僅短信費(fèi)用會(huì)上升,體驗(yàn)上也會(huì)很不好,一個(gè)鏈接就把你的手機(jī)屏幕占滿了,點(diǎn)擊的欲望也會(huì)降低。

          最近我剛好為公司推廣出去的長(zhǎng)鏈接做了短鏈接這個(gè)功能。簡(jiǎn)單描述一下我的需求,做一個(gè)活動(dòng),便于用戶推廣分潤(rùn),每個(gè)用戶分享出去的圖片上都帶有一個(gè)二維碼,這個(gè)二維碼需要帶上每個(gè)用戶的id,所以一個(gè)用戶一個(gè)二維碼,所以需要做兩個(gè)事情:1.將帶有用戶Id的長(zhǎng)鏈接生成短鏈接;2將短連接畫成二維碼合成到分享的圖片上去。第二步用前端的canvas畫布功能就可以了,第一步需要大批量將長(zhǎng)鏈接生成短連接。

          那么如何免費(fèi)的獲取到這些大量的短連接呢?微信公眾平臺(tái)提供了這個(gè)API,免費(fèi)的哦,只是需要有公眾號(hào)授權(quán)開通才可以(),這個(gè)基本上不是問題。

          綜上,是我個(gè)人在短網(wǎng)址生成這塊集成第三方的方案調(diào)研,如果公司有錢的話,或者手上有自己的短域名,那就更棒了,自己生成就可以了,但是短域名就那么些,物以稀為貴~

          上一篇:DNF最丑時(shí)裝大賽,各路奇葩玩家現(xiàn)身,丑到極致也是美,你有何看法?

          下一篇:吞噬蒼穹是本LJ書

          強(qiáng)推

          優(yōu)選文章

          熱門推薦