⚙️ Предварительные требования
- Прокси (По желанию)
- Установленный GO
- Ключ API Capsolver
👨💻 Код GO для решения FunCaptcha без прокси
Вот пример скрипта на GO для выполнения задачи:
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const (
clientKey = "" // Замените на ваш действительный CAPSOLVER_KEY
)
func main() {
pageURL := "page"
siteKey := "site key" // Замените на ваш прокси
taskID, err := solveFunCaptcha(pageURL, siteKey, clientKey)
if err != nil {
fmt.Println("Ошибка:", err)
return
}
if taskID != "" {
solution, err := getTaskResult(taskID, clientKey)
if err != nil {
fmt.Println("Ошибка:", err)
return
}
solutionToken, ok := solution["token"].(string)
if !ok {
fmt.Println("Токен не найден в решении")
return
}
fmt.Println("Токен решения:", solutionToken)
}
}
func solveFunCaptcha(pageURL, websitePublicKey, clientKey string) (string, error) {
payload := map[string]interface{}{
"clientKey": clientKey,
"task": map[string]string{
"type": "FunCaptchaTaskProxyLess",
"websiteURL": pageURL,
"websitePublicKey": websitePublicKey,
},
}
data, err := json.Marshal(payload)
if err != nil {
return "", err
}
fmt.Println("Создание задачи")
resp, err := http.Post("https://api.capsolver.com/createTask", "application/json", bytes.NewBuffer(data))
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
return "", fmt.Errorf("Ошибка создания задачи: Получен HTTP статус %d", resp.StatusCode)
}
var response map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&response)
if err != nil {
return "", err
}
taskID, ok := response["taskId"].(string)
fmt.Println("Получен ID задачи " + taskID)
if !ok {
return "", fmt.Errorf("ID задачи не найден в ответе")
}
return taskID, nil
}
func getTaskResult(taskID, clientKey string) (map[string]interface{}, error) {
payload := map[string]string{
"clientKey": clientKey,
"taskId": taskID,
}
for {
fmt.Println("Получение результата задачи")
data, err := json.Marshal(payload)
if err != nil {
return nil, err
}
resp, err := http.Post("https://api.capsolver.com/getTaskResult", "application/json", bytes.NewBuffer(data))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
return nil, fmt.Errorf("Ошибка получения результата задачи: Получен HTTP статус %d", resp.StatusCode)
}
var result map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&result)
if err != nil {
return nil, err
}
status, ok := result["status"].(string)
if !ok {
return nil, fmt.Errorf("Статус не найден в ответе")
}
if status == "ready" {
return result["solution"].(map[string]interface{}), nil
}
time.Sleep(3 * time.Second)
}
}
👨💻 Код GO для решения FunCaptcha с прокси
Вот пример скрипта на GO для выполнения задачи:
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const (
clientKey = "" // Замените на ваш действительный CAPSOLVER_KEY
)
func main() {
pageURL := "page"
siteKey := "site key" // Замените на ваш прокси
proxyURL := "http://password:username@host:port"
taskID, err := solveFunCaptcha(pageURL, siteKey, proxy, clientKey)
if err != nil {
fmt.Println("Ошибка:", err)
return
}
if taskID != "" {
solution, err := getTaskResult(taskID, clientKey)
if err != nil {
fmt.Println("Ошибка:", err)
return
}
solutionToken, ok := solution["token"].(string)
if !ok {
fmt.Println("Токен не найден в решении")
return
}
fmt.Println("Токен решения:", solutionToken)
}
}
func solveFunCaptcha(pageURL, websitePublicKey,proxy, clientKey string) (string, error) {
payload := map[string]interface{}{
"clientKey": clientKey,
"task": map[string]string{
"type": "FunCaptchaTask",
"websiteURL": pageURL,
"websitePublicKey": websitePublicKey,
"proxy": proxy,
},
}
data, err := json.Marshal(payload)
if err != nil {
return "", err
}
fmt.Println("Создание задачи")
resp, err := http.Post("https://api.capsolver.com/createTask", "application/json", bytes.NewBuffer(data))
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
return "", fmt.Errorf("Ошибка создания задачи: Получен HTTP статус %d", resp.StatusCode)
}
var response map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&response)
if err != nil {
return "", err
}
taskID, ok := response["taskId"].(string)
fmt.Println("Получен ID задачи " + taskID)
if !ok {
return "", fmt.Errorf("ID задачи не найден в ответе")
}
return taskID, nil
}
func getTaskResult(taskID, clientKey string) (map[string]interface{}, error) {
payload := map[string]string{
"clientKey": clientKey,
"taskId": taskID,
}
for {
fmt.Println("Получение результата задачи")
data, err := json.Marshal(payload)
if err != nil {
return nil, err
}
resp, err := http.Post("https://api.capsolver.com/getTaskResult", "application/json", bytes.NewBuffer(data))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
return nil, fmt.Errorf("Ошибка получения результата задачи: Получен HTTP статус %d", resp.StatusCode)
}
var result map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&result)
if err != nil {
return nil, err
}
status, ok := result["status"].(string)
if !ok {
return nil, fmt.Errorf("Статус не найден в ответе")
}
if status == "ready" {
return result["solution"].(map[string]interface{}), nil
}
time.Sleep(3 * time.Second)
}
}
⚠️ Измените эти переменные
- proxyURL: Измените на свой прокси, только если вы используете FunCaptchaTask.
- clientKey: Получите свой API-ключ на панели управления Capsolver.
- pageURL: Замените на URL веб-сайта, для которого вы хотите решить FunCaptcha
- siteKey: Замените на ключ сайта страницы с FunCaptcha