Golang 實現的驗證碼服務:captcha

jopen 11年前發布 | 105K 次閱讀 captcha 驗證碼(Captcha)

一款適用于并發高并且易于集成的驗證碼服務

功能簡單介紹下:

1. 隨機生成算術題,并隨機將題目中的部分數字/運算符變成漢字
2. 每個文字隨機顏色、字體傾斜度
3. 初始化生成 100 張驗證碼,運行過程中循環取圖片,如果每 10s 大于 100 次請求,則開始替換圖片 100 張(這些數字目前只能靠改代碼)
4. HTTP 接口,返回圖片內容 base64 和 答案,方便集成

Golang 實現的驗證碼服務:captcha

準備工作

依賴安裝: golang imagemagic

驗證成功:

pkg-config --cflags --libs MagickWand

go version

沒有報錯說明安裝成功

下載并編譯

git clone https://github.com/jianxinio/captcha/

或者 下載 并解壓

進入captcha文件夾后運行 source install.sh

Downloading necessary files 這步可能耗時很久,后面留意觀察錯誤,如果下載完后持續報錯可能是 imagemagic 安裝有誤

如果一切順利,可以看到多了一個 build 文件夾,其中

  1. bin 為可執行文件夾
  2. assets 為使用到的靜態資源文件夾
  3. tmp 為緩存驗證碼文件

除了 build 文件夾外,其他文件不會再被使用

啟動

進入到 bin 文件夾,./captcha 即可啟動。

見到 Init success. 的提示說明初始化緩存生成成功。此時可以在 tmp 文件夾中看到 100 張驗證碼。

線上環境請自備守護進程

程序集成

訪問 localhost:8001 即可見到驗證碼內容(格式為 base64(buffer)|result)。

使用時需要先 split('|') 然后將 base64 解密后給前端。

get '/captcha' do
  captcha = Faraday.get settings.captcha_server
  captcha_arr = captcha.body.split('|')
  @session['captcha_result'] = captcha_arr[1]
  content_type 'image/gif'
  Base64.decode64 captcha.body.split('|')[0]
end

高級配置

BriefDesign 中有詳細的設計文檔。

config.json 說明:

initial_count 初始化時產生的驗證碼數量
check_interval 檢查使用量間隔
threshold 更新驗證碼閥值
update_count 更新的驗證碼數量

如果訪問量較大,建議提高 initial_count 以及 update_count

更新配置文件后 reload 操作:

reload 只支持 initial_count 以及 update_count 的修改

操作方法: kill -USR2 pid

開源協議

MIT


項目主頁:http://www.baiduhome.net/lib/view/home/1411221184578

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!