You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.3 KiB
103 lines
2.3 KiB
package captchasolver
|
|
|
|
import (
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func Provider2CaptchaCreateCaptchaRequestV3(apiKey string, url string, googleKey string, googleAction string) string {
|
|
client := &http.Client{}
|
|
req, err := http.NewRequest("GET", "https://2captcha.com/in.php", nil)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return ""
|
|
}
|
|
|
|
q := req.URL.Query()
|
|
q.Add("key", apiKey)
|
|
q.Add("method", "userrecaptcha")
|
|
q.Add("version", "3")
|
|
q.Add("action", googleAction)
|
|
q.Add("min_score", "0.3")
|
|
q.Add("googlekey", googleKey)
|
|
q.Add("pageurl", url)
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return ""
|
|
}
|
|
respBody, _ := io.ReadAll(res.Body)
|
|
respBodyStr := string(respBody)
|
|
|
|
return respBodyStr[3:]
|
|
}
|
|
|
|
func Provider2CaptchaCreateCaptchaRequestV2(apiKey string, url string, googleKey string) string {
|
|
client := &http.Client{}
|
|
req, err := http.NewRequest("GET", "https://2captcha.com/in.php", nil)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return ""
|
|
}
|
|
|
|
q := req.URL.Query()
|
|
q.Add("key", apiKey)
|
|
q.Add("method", "userrecaptcha")
|
|
q.Add("googlekey", googleKey)
|
|
q.Add("pageurl", url)
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return ""
|
|
}
|
|
respBody, _ := io.ReadAll(res.Body)
|
|
respBodyStr := string(respBody)
|
|
|
|
return respBodyStr[3:]
|
|
}
|
|
|
|
func Provider2CaptchaGetCaptchaResult(apiKey string, captchaID string) string {
|
|
client := &http.Client{}
|
|
|
|
req, err := http.NewRequest("GET", "http://2captcha.com/res.php", nil)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return ""
|
|
}
|
|
|
|
q := req.URL.Query()
|
|
q.Add("key", apiKey)
|
|
q.Add("action", "get")
|
|
q.Add("id", captchaID)
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return ""
|
|
}
|
|
respBody, _ := io.ReadAll(res.Body)
|
|
respBodyStr := string(respBody)
|
|
|
|
return respBodyStr
|
|
}
|
|
|
|
func Provider2CaptchaV2E2E(apiKey string, url string, dataSiteKey string) string {
|
|
captchaReqID := Provider2CaptchaCreateCaptchaRequestV2(apiKey, url, dataSiteKey)
|
|
log.Println(captchaReqID)
|
|
captchaAnswer := "CAPCHA_NOT_READY"
|
|
for captchaAnswer == "CAPCHA_NOT_READY" {
|
|
time.Sleep(500 * time.Millisecond)
|
|
captchaAnswer = Provider2CaptchaGetCaptchaResult(apiKey, captchaReqID)
|
|
}
|
|
log.Printf("Captcha ID: %s; Captcha Answer: %s\n", captchaReqID, captchaAnswer)
|
|
captchaAnswer = captchaAnswer[3:]
|
|
|
|
return captchaAnswer
|
|
}
|