如果网站速度慢,请使用网站链接 2captcha.cn
使用Go绕过验证码
使用Go lang模块在线破解验证码。
Golang程序包可轻松集成2Captcha的验证码破解服务API,以绕过reCAPTCHA、Arkose captcha、Geetest,并破解其他验证码。
快速开始安装
脚本包可通过安装程序安装或人工安装
配置
配置已安装软件包的所有必要参数说明
客户端实例创建方法如下: 
client := api2captcha.NewClient('YOUR_API_KEY')您还能为已创建的实例设置选项:
client.SoftId = 123
client.Callback = "https://your.site/result-receiver"
client.DefaultTimeout = 120
client.RecaptchaTimeout = 600
client.PollingInterval = 100客户端实例选项
| 选项 | 默认值 | 说明 | 
|---|---|---|
| softId | - | 您将在2Captcha软件目录发布后获得软件ID | 
| 回调函数 | - | 验证码识别结果会发送至网络服务器URL,但应先在账户的pingback设置中注册URL | 
| defaultTimeout | 120 | 除reCAPTCHA外的验证码的轮询超时时间(秒),用于判定模块尝试从res.phpAPI端点获得答案的时间 | 
| recaptchaTimeout | 600 | reCAPTCHA的轮询超时时间(秒),用于判定模块尝试从res.phpAPI端点获得答案的时间 | 
| pollingInterval | 10 | 向res.phpAPI端点发送请求的间隔时间(秒),不建议设置在5秒以内 | 
重要提示:一旦回调函数确定用于客户端实例,那么所有方法都只返回验证码ID,无法通过轮询API获得结果。结果将发送至回调URL。请通过getResult方法进行人工破解。
破解验证码
您在提交图片验证码时可提出额外选项,以便2Captcha的员工能够正确破解。
验证码选项
| 选项 | 默认值 | 说明 | 
|---|---|---|
| numeric | 0 | 判定验证码是否由数字或其他符号组成,详情请见API文档。 | 
| minLength | 0 | 最小答案长度 | 
| maxLength | 0 | 最大答案长度 | 
| phrase | 0 | 判定答案是否由多个词语组成 | 
| caseSensitive | 0 | 判定答案是否区分大小写 | 
| calc | 0 | 确定验证码需要计算 | 
| lang | - | 确定验证码语言,见可用语言列表。 | 
| hintImg | - | 所有验证码员工可见的提示图片 | 
| hintText | - | 员工可见的验证码提示或任务文字 | 
基本示例
以下为错误处理的基本破解程序的调用示例。
cap := api2captcha.Normal{
   File: "/path/to/normal.jpg",
}
code, err := client.Solve(cap.ToRequest())
if err != nil {
  if err == api2captcha.ErrTimeout {
    log.Fatal("Timeout");
  } else if err == api2captcha.ErrApi {
    log.Fatal("API error");
  } else if err == api2captcha.ErrNetwork {
    log.Fatal("Network error");
  } else {
    log.Fatal(err);
  }
}
fmt.Println("code "+code)您可以利用以下方法绕过normal captcha(带有扭曲文字的图片)。这个方法也可用于识别图片上的任何文字。
cap := api2captcha.Normal{
    File: "/path/to/normal.jpg",
    Numeric: 4,
    MinLen: 4,
    MaxLen: 20,
    Phrase: true,
    CaseSensitive: true,
    Lang: "en",
    HintImgFile: "/path/to/hint.jpg",
    HintText: "Type red symbols",
 }这种方法可用于绕过需要回答清晰文字问题的验证码。
cap := api2captcha.Text{
    Text: "If tomorrow is Saturday, what day is today?",
    Lang: "en",
 }此方法可破解reCAPTCHA V2,并获得令牌实现绕过保护。
cap := api2captcha.ReCaptcha{
    SiteKey: "6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-",
    Url: "https://mysite.com/page/with/recaptcha",
    Invisible: true,
    Action: "verify",
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)此方法利可破解reCAPTCHA V3,并返回令牌。
cap := api2captcha.ReCaptcha{
    SiteKey: "6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-",
    Url: "https://mysite.com/page/with/recaptcha",
    Version: "v3",
    Action: "verify",
    Score: 0.3,
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)FunCaptcha(Arkoselabs)破解方法,并返回令牌。
cap := api2captcha.FunCaptcha{
    SiteKey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC",
    Url: "https://mysite.com/page/with/funcaptcha",
    Surl: "https://client-api.arkoselabs.com",
    UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
    Data: map[string]string{"anyKey":"anyValue"},   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)此方法可破解GeeTest拼图验证码,并返回一组JSON格式的令牌。
cap := api2captcha.GeeTest{
    GT: "f2ae6cadcf7886856696502e1d55e00c",
    ApiServer: "api-na.geetest.com",
    Challenge: "12345678abc90123d45678ef90123a456b",
    Url: "https://mysite.com/captcha.html",
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)以令牌形式绕过Capy拼图验证码。
cap := api2captcha.Capy{
    SiteKey: "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
    Url: "https://www.mysite.com/captcha/",   
 }
 req := cap.ToRequest()
 req.SetProxy("HTTPS", "login:password@IP_address:PORT")
 code, err := client.solve(req)Grid法最初名为Old reCAPTCHA V2法,先在图中画好网格,点击 特定网格框,以绕过任何类型的验证码。这种方法会返回方框数。
cap := api2captcha.Grid{
    File: "path/to/captcha.jpg",
    Rows: 3,
    Cols: 3,
    PreviousId: 0,
    CanSkip: false,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Select all images with an Orange",
}Canvas法需要围着图中物体画一条线。这种方法会返回一组点坐标,用于绘制多边形。
cap := api2captcha.Canvas{
    File: "path/to/captcha.jpg",
    PreviousId: 0,
    CanSkip: false,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Draw around apple",
}ClickCaptcha会返回验证码图片的点坐标,若您需要点击图片的特定点,就可以使用这种方法。
cap := api2captcha.Coordinates{
    File: "path/to/captcha.jpg",
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Connect the dots",
}这种方法可破解需要旋转物体的验证码,主要用于绕过FunCaptcha。它会返回旋转角度。
cap := api2captcha.Rotate{
    File: "path/to/captcha.jpg",
    Angle: 40,
    Lang: "en",
    HintImageFile: "path/to/hint.jpg",
    HintText: "Put the images in the correct way",
}其他方法
主要脚本执行时可用的其他方法
send / getResult
上述方法可用于人工提交验证码和答案轮询。
id, err := client.Send(cap.ToRequest())
if err != nil {
   log.Fatal(err);
}
time.Sleep(10 * time.Second)
code, err := client.GetResult(id)
if err != nil {
   log.Fatal(err);
}
if code == nil {
   log.Fatal("Not ready")
}
fmt.Println("code "+*code)balance
以此方法获取账户余额。
balance, err := client.GetBalance()
if err != nil {
   log.Fatal(err);
}report
以此方法报告验证码答案之优劣。
err := client.Report(id, true) // solved correctly
err := client.Report(id, false) // solved incorrectly