我正在制作验证码并遵循此处给出的示例。我需要修改示例以使用 gorilla mux 的路由,因为我的应用程序的其余部分使用它。对于我的生活,我无法弄清楚如何正确地为该示例的第 47 行路由路径。我下面的结果没有生成验证码......(示例本身工作正常)。对于狗屎和傻笑,我什至尝试过“http.HandleFunc("/captcha/", captchaHandler)”,但这也不起作用。有什么建议?package mainimport ( "github.com/dchest/captcha" "github.com/gorilla/mux" "io" "log" "net/http" "text/template")var formTemplate = template.Must(template.New("example").Parse(formTemplateSrc))func showFormHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } d := struct { CaptchaId string }{ captcha.New(), } if err := formTemplate.Execute(w, &d); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) }}func processFormHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") if !captcha.VerifyString(r.FormValue("captchaId"), r.FormValue("captchaSolution")) { io.WriteString(w, "Wrong captcha solution! No robots allowed!\n") } else { io.WriteString(w, "Great job, human! You solved the captcha.\n") } io.WriteString(w, "<br><a href='/'>Try another one</a>")}func captchaHandler(w http.ResponseWriter, r *http.Request) { captcha.Server(captcha.StdWidth, captcha.StdHeight)}type Routes []Routetype Route struct { Method string Pattern string HandlerFunc http.HandlerFunc}func main() { /* http.HandleFunc("/", showFormHandler) http.HandleFunc("/process", processFormHandler) //http.HandleFunc("/captcha/", captchaHandler) // doesn't work http.Handle("/captcha/", captcha.Server(captcha.StdWidth, captcha.StdHeight)) fmt.Println("Server is at localhost:8666") if err := http.ListenAndServe(":8666", nil); err != nil { log.Fatal(err) } */编辑#1:更清楚地说“不起作用”没有帮助。它返回 404 错误。编辑 #2:github 上的示例工作正常......只有当我修改路由时,当我尝试生成验证码时它返回 404。
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
您可以转换http.Handler h
一到http.HandlerFunc使用方法表达式:
h.ServeHTTP
您可以直接使用路由Handler方法注册 Handler,而不是转换为 HandlerFunc :
router.Methods("GET").Path("/captcha/").Handler(captcha.Server(captcha.StdWidth, captcha.StdHeight))
根据您的评论和编辑,我认为您需要前缀匹配而不是完全匹配:
router.Methods("GET").PathPrefix("/captcha/").Handler(captcha.Server(captcha.StdWidth, captcha.StdHeight))
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消