代码拉取完成,页面将自动刷新
同步操作将从 ShirDon-廖显东/go验证码合集包 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//++++++++++++++++++++++++++++++++++++++++
//Fighting for great,share generate value!
//Build the best soft by golang,let's go!
//++++++++++++++++++++++++++++++++++++++++
//Author:ShirDon <http://www.shirdon.com>
//Email:hcbsts@163.com; 823923263@qq.com
//++++++++++++++++++++++++++++++++++++++++
package main
import (
"flag"
"fmt"
"gitee.com/shirdonl/captchas_with_go"
"gitee.com/shirdonl/configs_with_go"
//"github.com/hanguofeng/gocaptcha"
"html"
"image/png"
"log"
"net/http"
"os"
)
var (
ccaptcha *captchas_with_go.Captcha
configFile = flag.String("c", "examples/config.conf", "the config file")
)
const (
DEFAULT_PORT = "7777"
DEFAULT_LOG = "./captcha-server.log"
)
func ShowImageHandler(w http.ResponseWriter, r *http.Request) {
key := r.FormValue("key")
if len(key) >= 0 {
cimg, err := ccaptcha.GetImage(key)
log.Println("err", err)
if nil == err {
w.Header().Add("Content-Type", "image/png")
png.Encode(w, cimg)
} else {
log.Printf("show image error:%s", err.Error())
w.WriteHeader(500)
}
}
log.Printf("[cmd:showimage][remote_addr:%s][key:%s]", r.RemoteAddr, key)
}
func GetKeyHandler(w http.ResponseWriter, r *http.Request) {
callback := html.EscapeString(r.FormValue("callback"))
key, err := ccaptcha.GetKey(4)
retstr := "{error_no:%d,error_msg:'%s',key:'%s'}"
error_no := 0
error_msg := ""
if nil != err {
error_no = 1
error_msg = err.Error()
}
if callback != "" {
retstr = "%s(" + retstr + ")"
retstr = fmt.Sprintf(retstr, callback, error_no, error_msg, key)
} else {
retstr = fmt.Sprintf(retstr, error_no, error_msg, key)
}
w.Header().Add("Content-Type", "application/json")
w.Write([]byte(retstr))
log.Printf("[cmd:getkey][remote_addr:%s][key:%s]", r.RemoteAddr, key)
}
func VerifyHandler(w http.ResponseWriter, r *http.Request) {
key := r.FormValue("key")
code := r.FormValue("code")
callback := html.EscapeString(r.FormValue("callback"))
retstr := "{error_no:%d,error_msg:'%s',key:'%s'}"
error_no := 0
error_msg := ""
suc, msg := ccaptcha.Verify(key, code)
if false == suc {
error_no = 1
error_msg = msg
}
if callback != "" {
retstr = "%s(" + retstr + ")"
retstr = fmt.Sprintf(retstr, callback, error_no, error_msg, key)
} else {
retstr = fmt.Sprintf(retstr, error_no, error_msg, key)
}
w.Header().Add("Content-Type", "application/json")
w.Write([]byte(retstr))
log.Printf("[cmd:verify][remote_addr:%s][key:%s][code:%s]", r.RemoteAddr, key, code)
}
func IndexHandler(w http.ResponseWriter, r *http.Request) {
retstr := "<html>"
retstr += "<body>"
retstr += "<h1>gocaptcha server</h1>"
retstr += "<h2>document</h2>"
retstr += "<p>see:<a href='https://github.com/hanguofeng/gocaptcha/tree/master/samples/gocaptcha-server'>https://github.com/hanguofeng/gocaptcha/tree/master/samples/gocaptcha-server</a></p>"
retstr += "<h2>interface</h2>"
retstr += "<p><a href='/getkey'>/getkey</a></p>"
retstr += "<p><a href='/showimage'>/showimage</a></p>"
retstr += "<p><a href='/verify'>/verify</a></p>"
retstr += "</body>"
retstr += "</html>"
w.Write([]byte(retstr))
}
func main() {
flag.Parse()
/* 1.load the config file and assign port/logfile */
port := DEFAULT_PORT
//logfile := DEFAULT_LOG
if _, err := os.Stat(*configFile); os.IsNotExist(err) {
log.Fatalf("config file:%s not exists!", *configFile)
os.Exit(1)
}
c, err := config.ReadDefault(*configFile)
if nil != err {
port = DEFAULT_PORT
//logfile = DEFAULT_LOG
}
port, err = c.String("service", "port")
if nil != err {
port = DEFAULT_PORT
}
//logfile, err = c.String("service", "logfile")
//if nil != err {
// logfile = DEFAULT_LOG
//}
log.Printf("=======111=======")
//os.MkdirAll(filepath.Dir(logfile), 0777)
//f, err := os.OpenFile(logfile, os.O_RDWR|os.O_CREATE, 0666)
//log.SetOutput(f)
log.Printf("=======1131=======")
captcha, err := captchas_with_go.CreateCaptchaFromConfigFile(*configFile)
if nil != err {
log.Fatalf("config load failed:%s", err.Error())
} else {
ccaptcha = captcha
}
log.Printf("=======2222=======")
/* 2. bind handler */
http.HandleFunc("/showimage", ShowImageHandler)
http.HandleFunc("/getkey", GetKeyHandler)
http.HandleFunc("/verify", VerifyHandler)
http.HandleFunc("/", IndexHandler)
/* 3. run the http server */
s := &http.Server{Addr: ":" + port}
log.Printf("=======ready to serve=======")
log.Fatal(s.ListenAndServe())
//f.Close()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。