网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
//http://localhost:8080/captcha/gHEIwh7nWreTFb53MkVk.png
r.GET("/captcha/:captchaId", func(c *gin.Context) {
captchaId := c.Param("captchaId")
fmt.Println("GetCaptchaPng : " + captchaId)
ServeHTTP(c.Writer, c.Request)
})
//3.验证
//http://localhost:8080/verify/dVCqYbq7r2olKZfEtTvo/647489
r.GET("/verify/:captchaId/:value", func(c *gin.Context) {
captchaId := c.Param("captchaId")
value := c.Param("value")
if captchaId == "" || value == "" {
c.String(http.StatusBadRequest, "参数错误")
}
if captcha.VerifyString(captchaId, value) {
c.JSON(http.StatusOK, "验证成功")
} else {
c.JSON(http.StatusOK, "验证失败")
}
})
r.Run()
}
func ServeHTTP(w http.ResponseWriter, r *http.Request) {
dir, file := path.Split(r.URL.Path)
ext := path.Ext(file)
id := file[:len(file)-len(ext)]
fmt.Println("file : " + file)
fmt.Println("ext : " + ext)
fmt.Println("id : " + id)
if ext == “” || id == “” {
http.NotFound(w, r)
return
}
fmt.Println("reload : " + r.FormValue(“reload”))
if r.FormValue(“reload”) != “” {
captcha.Reload(id)
}
lang := strings.ToLower(r.FormValue(“lang”))
download := path.Base(dir) == “download”
if Serve(w, r, id, ext, lang, download, captcha.StdWidth, captcha.StdHeight) == captcha.ErrNotFound {
http.NotFound(w, r)
}
}
func Serve(w http.ResponseWriter, r *http.Request, id, ext, lang string, download bool, width, height int) error {
w.Header().Set(“Cache-Control”, “no-cache, no-store, must-revalidate”)
w.Header().Set(“Pragma”, “no-cache”)
w.Header().Set(“Expires”, “0”)
var content bytes.Buffer
switch ext {
case ".png":
w.Header().Set("Content-Type", "image/png")
captcha.WriteImage(&content, id, width, height)
case ".wav":
w.Header().Set("Content-Type", "audio/x-wav")
captcha.WriteAudio(&content, id, lang)
default:
return captcha.ErrNotFound
}
if download {
w.Header().Set("Content-Type", "application/octet-stream")
}
http.ServeContent(w, r, id+ext, time.Time{}, bytes.NewReader(content.Bytes()))
return nil
}
main方法分三步
1.获取验证码id
![img](https://img-blog.csdnimg.cn/img_convert/9dbb6ef0896644ccdc3fdac018e4f7af.png)
![img](https://img-blog.csdnimg.cn/img_convert/816338c02495bbfe9f15287acf84f9a1.png)
![img](https://img-blog.csdnimg.cn/img_convert/93572cd78186f8f3166c8fdc04d00957.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**