# capsolver-go **Repository Path**: kaylee595/capsolver-go ## Basic Information - **Project Name**: capsolver-go - **Description**: capsolver-go - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-06 - **Last Updated**: 2025-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 开始使用 我推荐你使用第一种方式(`GetTokenRecaptcha`). 如果你要实现的目标本包没有进行封装, 那么请你自行采用`CreateTask`和`GetTaskResult`的方式进行开发. ```go func ExampleSolver_GetTokenRecaptcha() { ret, err := New().GetTokenRecaptcha(context.Background(), ReqGetTokenRecaptcha{ Type: TaskTypeReCaptchaV2TaskProxyLess, WebsiteURL: "https://www.google.com/recaptcha/api2/demo", WebsiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }) if err != nil { panic(err) } fmt.Printf("status: %s, GRecaptchaResponse not empty: %t\n", ret.Status, ret.Solution.GRecaptchaResponse != "") // Output: // status: ready, GRecaptchaResponse not empty: true } func ExampleSolver_CreateTaskRecaptcha() { solver := New() taskId, err := solver.CreateTaskRecaptcha(context.Background(), ReqCreateTaskRecaptcha{ Type: TaskTypeReCaptchaV2TaskProxyLess, WebsiteURL: "https://www.google.com/recaptcha/api2/demo", WebsiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }) if err != nil { panic(err) } var retTaskResult *RespGetTaskResult[RespGetTaskResultRecaptcha] for { retTaskResult, err = solver.GetTaskResultRecaptcha(context.Background(), taskId) if err != nil { panic(err) } if retTaskResult.Status == TaskStatusReady { break } time.Sleep(3 * time.Second) } fmt.Printf("status: %s, GRecaptchaResponse not empty: %t\n", retTaskResult.Status, retTaskResult.Solution.GRecaptchaResponse != "") // Output: // status: ready, GRecaptchaResponse not empty: true } func ExampleSolver_CreateTaskGeetest() { resp := req.DefaultClient().Get("https://demos.geetest.com/gt/register-test"). SetQueryParam("t", cast.ToString(time.Now().UnixMilli())).Do() if resp.Err != nil { panic(resp.Err) } retGeetestRegister := gjson.ParseBytes(resp.Bytes()) if !retGeetestRegister.Get("gt").Exists() || !retGeetestRegister.Get("challenge").Exists() { panic("gt or challenge is empty") } solver := New() taskId, err := solver.CreateTaskGeetest(context.Background(), ReqCreateTaskGeetest{ Type: TaskTypeGeeTestTaskProxyLess, WebsiteURL: "https://demos.geetest.com/test.html", GT: retGeetestRegister.Get("gt").String(), Challenge: retGeetestRegister.Get("challenge").String(), }) if err != nil { panic(err) } var retTaskResult *RespGetTaskResult[RespGetTaskResultGeetest] for { retTaskResult, err = solver.GetTaskResultGeetest(context.Background(), taskId) if err != nil { panic(err) } if retTaskResult.Status == TaskStatusReady { break } time.Sleep(3 * time.Second) } fmt.Printf("status: %s, validate not empty: %t\n", retTaskResult.Status, retTaskResult.Solution.Validate != "") // Output: // status: ready, validate not empty: true } func ExampleSolver_CreateTaskGeetest_v4() { solver := New() taskId, err := solver.CreateTaskGeetest(context.Background(), ReqCreateTaskGeetest{ Type: TaskTypeGeeTestTaskProxyLess, WebsiteURL: "https://gt4.geetest.com/", CaptchaId: "54088bb07d2df3c46b79f80300b0abbe", }) if err != nil { panic(err) } var retTaskResult *RespGetTaskResult[RespGetTaskResultGeetest] for { retTaskResult, err = solver.GetTaskResultGeetest(context.Background(), taskId) if err != nil { panic(err) } if retTaskResult.Status == TaskStatusReady { break } time.Sleep(3 * time.Second) } fmt.Printf("status: %s, captchaId: %s, lotNumber not empty: %t, passToken not empty: %t, genTime not empty: %t, captchaOutput not empty: %t\n", retTaskResult.Status, retTaskResult.Solution.CaptchaId, retTaskResult.Solution.LotNumber != "", retTaskResult.Solution.PassToken != "", retTaskResult.Solution.GenTime != "", retTaskResult.Solution.CaptchaOutput != "", ) // Output: // status: ready, captchaId: 54088bb07d2df3c46b79f80300b0abbe, lotNumber not empty: true, passToken not empty: true, genTime not empty: true, captchaOutput not empty: true } func ExampleSolver_GetBalance() { retBalance, err := New().GetBalance(context.Background()) if err != nil { panic(err) } fmt.Printf("balance not eq zero: %t\n", retBalance.Balance != 0) // Output: // balance not eq zero: true } ```