```go // example of HTTP server that uses the captcha package. package main import ( "encoding/json" "fmt" "log" "net/http" "os" "time" "github.com/go-redis/redis" "github.com/mojocn/base64Captcha" ) // customizeRdsStore An object implementing Store interface type customizeRdsStore struct { redisClient *redis.Client } // customizeRdsStore implementing Set method of Store interface func (s *customizeRdsStore) Set(id string, value string) { err := s.redisClient.Set(id, value, time.Minute*10).Err() if err != nil { log.Println(err) } } // customizeRdsStore implementing Get method of Store interface func (s *customizeRdsStore) Get(id string, clear bool) (value string) { val, err := s.redisClient.Get(id).Result() if err != nil { log.Println(err) return "" } if clear { err := s.redisClient.Del(id).Err() if err != nil { log.Println(err) return "" } } return val } func init() { // create redis client client := redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", Password: "", // no password set DB: 0, // use default DB }) // init redis store customeStore := customizeRdsStore{client} base64Captcha.SetCustomStore(&customeStore) } // ConfigJsonBody json request body. type ConfigJsonBody struct { Id string CaptchaType string VerifyValue string ConfigAudio base64Captcha.ConfigAudio ConfigCharacter base64Captcha.ConfigCharacter ConfigDigit base64Captcha.ConfigDigit } // base64Captcha create http handler func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) { // parse request parameters // 接收客户端发送来的请求参数 decoder := json.NewDecoder(r.Body) var postParameters ConfigJsonBody err := decoder.Decode(&postParameters) if err != nil { log.Println(err) } defer r.Body.Close() // create base64 encoding captcha // 创建base64图像验证码 var config interface{} switch postParameters.CaptchaType { case "audio": config = postParameters.ConfigAudio case "character": config = postParameters.ConfigCharacter default: config = postParameters.ConfigDigit } captchaId, captcaInterfaceInstance := base64Captcha.GenerateCaptcha(postParameters.Id, config) base64blob := base64Captcha.CaptchaWriteToBase64Encoding(captcaInterfaceInstance) // or you can just write the captcha content to the httpResponseWriter. // before you put the captchaId into the response COOKIE. // captcaInterfaceInstance.WriteTo(w) // set json response // 设置json响应 w.Header().Set("Content-Type", "application/json; charset=utf-8") body := map[string]interface{}{"code": 1, "data": base64blob, "captchaId": captchaId, "msg": "success"} json.NewEncoder(w).Encode(body) } // base64Captcha verify http handler func captchaVerifyHandle(w http.ResponseWriter, r *http.Request) { // parse request parameters // 接收客户端发送来的请求参数 decoder := json.NewDecoder(r.Body) var postParameters ConfigJsonBody err := decoder.Decode(&postParameters) if err != nil { log.Println(err) } defer r.Body.Close() // verify the captcha // 比较图像验证码 verifyResult := base64Captcha.VerifyCaptcha(postParameters.Id, postParameters.VerifyValue) // set json response // 设置json响应 w.Header().Set("Content-Type", "application/json; charset=utf-8") body := map[string]interface{}{"code": "error", "data": "验证失败", "msg": "captcha failed"} if verifyResult { body = map[string]interface{}{"code": "success", "data": "验证通过", "msg": "captcha verified"} } json.NewEncoder(w).Encode(body) } // start a net/http server func main() { staticPath := fmt.Sprintf("%s/src/github.com/mojocn/base64Captcha/_examples/static", os.Getenv("GOPATH")) // serve Vuejs+ElementUI+Axios Web Application http.Handle("/", http.FileServer(http.Dir(staticPath))) // api for create captcha http.HandleFunc("/api/getCaptcha", generateCaptchaHandler) // api for verify captcha http.HandleFunc("/api/verifyCaptcha", captchaVerifyHandle) fmt.Println("Server is at localhost:7777") if err := http.ListenAndServe("localhost:7777", nil); err != nil { log.Fatal(err) } } ```