1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| package main
import ( "encoding/json" "fmt" "io/ioutil" "net/http" "strings" )
type CloudflareTurnstileVerificationResponseEntity struct { Success bool `json:"success"` ErrorCodes []string `json:"error-codes"` ChallengeTS string `json:"challenge_ts"` Hostname string `json:"hostname"` Action string `json:"action"` Cdata string `json:"cdata"` Messages []string `json:"messages"` }
func CloudflareTurnstileVerification(token string) (err error, success bool) {
var url = "https://challenges.cloudflare.com/turnstile/v0/siteverify" var secret = "密钥"
var requestPayloadMap map[string]string = map[string]string{ "secret": secret, "response": token, } var requestPayloadString string if res, err := json.Marshal(requestPayloadMap); err != nil { return err, success } else { requestPayloadString = string(res) } var responseEntity *http.Response if res, err := http.Post(url, "application/json", strings.NewReader(requestPayloadString)); err != nil { return err, success } else { responseEntity = res } defer responseEntity.Body.Close() var responseText []byte if res, err := ioutil.ReadAll(responseEntity.Body); err != nil { return err, success } else { responseText = res } var responseObject CloudflareTurnstileVerificationResponseEntity if err := json.Unmarshal(responseText, &responseObject); err != nil { return err, success } if responseObject.Success == false { var errorCodeListString strings.Builder errorCodeListString.WriteString("\nErrorCodes:\n") for i := 0; i < len(responseObject.ErrorCodes); i++ { errorCodeListString.WriteString(fmt.Sprintf("%d:%s\n", i, responseObject.ErrorCodes[i])) } errorCodeListString.WriteString("\nMessages:\n") for i := 0; i < len(responseObject.Messages); i++ { errorCodeListString.WriteString(fmt.Sprintf("%d:%s\n", i, responseObject.Messages[i])) } return err, false }
return err, true }
|