Blog
Как решить FunCaptcha с помощью Go

Как решить FunCaptcha с помощью Go

Logo of Capsolver

CapSolver Blogger

How to use capsolver

16-Nov-2023

Обход funcaptcha, funcaptcha с GO, решатель funcaptcha go

⚙️ Предварительные требования

  • Прокси (По желанию)
  • Установленный 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

👀 Дополнительная информация


Máse