欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何實(shí)現(xiàn)Golang的Http驗(yàn)證碼-創(chuàng)新互聯(lián)

本文將為大家詳細(xì)介紹“如何實(shí)現(xiàn)Golang的Http驗(yàn)證碼”,內(nèi)容步驟清晰詳細(xì),細(xì)節(jié)處理妥當(dāng),而小編每天都會(huì)更新不同的知識(shí)點(diǎn),希望這篇“如何實(shí)現(xiàn)Golang的Http驗(yàn)證碼”能夠給你意想不到的收獲,請(qǐng)大家跟著小編的思路慢慢深入,具體內(nèi)容如下,一起去收獲新知識(shí)吧。

專業(yè)從事成都做網(wǎng)站、網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計(jì),微信小程序,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠(chéng)服務(wù),采用H5技術(shù)+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站,讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過(guò)程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。

golang的優(yōu)點(diǎn)有哪些

golang是一種編譯語(yǔ)言,可以將代碼編譯為機(jī)器代碼,編譯后的二進(jìn)制文件可以直接部署到目標(biāo)機(jī)器而無(wú)需額外的依賴,所以golang的性能優(yōu)于其他的解釋性語(yǔ)言,且可以在golang中使用goroutine來(lái)實(shí)現(xiàn)并發(fā)性,它提供了一個(gè)非常優(yōu)雅的goroutine調(diào)度程序系統(tǒng),可以很容易地生成數(shù)百萬(wàn)個(gè)goroutine。

Golang Http 驗(yàn)證碼示例


驗(yàn)證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試)的縮寫,是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序。可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試,實(shí)際上用驗(yàn)證碼是現(xiàn)在很多網(wǎng)站通行的方式,我們利用比較簡(jiǎn)易的方式實(shí)現(xiàn)了這個(gè)功能。這個(gè)問(wèn)題可以由計(jì)算機(jī)生成并評(píng)判,但是必須只有人類才能解答。由于計(jì)算機(jī)無(wú)法解答CAPTCHA的問(wèn)題,所以回答出問(wèn)題的用戶就可以被認(rèn)為是人類。

傳統(tǒng)網(wǎng)站驗(yàn)證碼工作機(jī)制

  • 客戶端請(qǐng)求服務(wù)器獲取驗(yàn)證碼圖片

  • 服務(wù)器生成隨機(jī)串(驗(yàn)證碼值)寫入Session,并將驗(yàn)證碼值寫入到圖片中返回給客戶端

  • 客戶端輸入圖片上的字符串提交給服務(wù)器驗(yàn)證

  • 服務(wù)器比對(duì)客戶端提交的字符串值和 Session 中是否匹配,如果匹配則通過(guò)驗(yàn)證

由于服務(wù)器生成的驗(yàn)證碼值從始至終均未返回給客戶端,因此,客戶端只能從圖片中識(shí)別驗(yàn)證碼字符串,從而保證人機(jī)校驗(yàn)邏輯。

Go的HTTP驗(yàn)證碼

思路

Go 語(yǔ)言的 HTTP 服務(wù)器默認(rèn)不支持 Session,因此驗(yàn)證碼值需要換個(gè)思路存儲(chǔ),以下是不使用 Session 的邏輯

  • 客戶端請(qǐng)求服務(wù)器獲取驗(yàn)證碼ID

  • 服務(wù)器生成驗(yàn)證碼 ID,并生成驗(yàn)證碼值,將 ID 和值的映射關(guān)系記錄到內(nèi)存或緩存,并將 ID 返回給客戶端

  • 客戶端根據(jù)返回的 ID 請(qǐng)求服務(wù)器獲取驗(yàn)證碼圖片

  • 服務(wù)器獲取到驗(yàn)證碼 ID,從內(nèi)存或緩存中取出驗(yàn)證碼值,將該值寫入圖片并將圖片返回給客戶端

  • 客戶端提交驗(yàn)證碼 ID(第1步獲得)和驗(yàn)證碼值給服務(wù)器驗(yàn)證

  • 服務(wù)器獲取驗(yàn)證碼 ID,從內(nèi)存或緩存中取出驗(yàn)證碼值與客戶端提交的驗(yàn)證碼值比對(duì)

示例

  1. 安裝驗(yàn)證碼依賴

github.com/dchest/captcha
  1. 代碼實(shí)現(xiàn)

package main
   
   import (
       "fmt"
       "github.com/dchest/captcha"
       "log"
       "net/http"
   )
   
   func main() {
       // 獲取驗(yàn)證碼 ID
       http.HandleFunc("/captcha/generate", func(w http.ResponseWriter, r *http.Request) {
           id := captcha.NewLen(6)
           if _, err := fmt.Fprint(w, id); err != nil {
               log.Println("generate captcha error", err)
           }
       })
       // 獲取驗(yàn)證碼圖片
       http.HandleFunc("/captcha/image", func(w http.ResponseWriter, r *http.Request) {
           id := r.URL.Query().Get("id")
           if id == "" {
               http.Error(w, "Bad Request", http.StatusBadRequest)
               return
           }
           w.Header().Set("Content-Type", "image/png")
           if err := captcha.WriteImage(w, id, 120, 80); err != nil {
               log.Println("show captcha error", err)
           }
       })
       // 業(yè)務(wù)處理
       http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
           if err := r.ParseForm(); err != nil {
               log.Println("parseForm error", err)
               http.Error(w, "Internal Error", http.StatusInternalServerError)
               return
           }
           // 獲取驗(yàn)證碼 ID 和驗(yàn)證碼值
           id := r.FormValue("id")
           value := r.FormValue("value")
           // 比對(duì)提交的驗(yàn)證碼值和內(nèi)存中的驗(yàn)證碼值
           if captcha.VerifyString(id, value) {
               fmt.Fprint(w, "ok")
           } else {
               fmt.Fprint(w, "mismatch")
           }
       })
       log.Fatal(http.ListenAndServe(":8080", nil))
   }
  1. 運(yùn)行

    1. 訪問(wèn)/captcha/generate獲得驗(yàn)證碼 ID

    2. 訪問(wèn)/captcha/image?id=驗(yàn)證碼 ID

    3. 訪問(wèn)/login,并輸入第一步的驗(yàn)證碼 ID 和第二步的驗(yàn)證碼值即可查看驗(yàn)證結(jié)果

如果你能讀到這里,小編希望你對(duì)“如何實(shí)現(xiàn)Golang的Http驗(yàn)證碼”這一關(guān)鍵問(wèn)題有了從實(shí)踐層面最深刻的體會(huì),具體使用情況還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞名稱:如何實(shí)現(xiàn)Golang的Http驗(yàn)證碼-創(chuàng)新互聯(lián)
本文路徑:http://www.chinadenli.net/article10/ijgdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站外貿(mào)建站云服務(wù)器服務(wù)器托管企業(yè)網(wǎng)站制作ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)