Генерация и применение заголовков Kasada с помощью Go
Создайте KasadaTask, затем отправьте полный набор возвращённых заголовков и идентификационные данные браузера через успешный прокси. Официальный Go SDK генерирует решение; ваш клиент net/http выполняет запрос к целевому сайту. Локальный браузер или плагин не требуется.
На этой странице
Настройте и запустите пример на Go
Используйте Go 1.22 или новее и установите официальный модуль solvethree.com/[email protected]. Установка описана в документации по интеграции с Go.
Отдельный режим Kasada сейчас поддерживает HTTPS-адреса только с точным именем хоста www.ticketmaster.com. Пример запрашивает его главную страницу; замените input.URL на нужный URL на этом поддерживаемом хосте.
- Задайте в
SOLVETHREE_API_KEYAPI-ключ вашего рабочего пространства. Храните его на сервере. - Задайте в
SOLVETHREE_PROXYURL HTTP- или HTTPS-прокси без пути, строки запроса и фрагмента. В этом примере используется один прокси; не указывайте дополнительноProxyCandidates. - Оставьте для
TypeзначениеKasadaTask. Не добавляйтеSite,Action,RecaptchaType, поля сессии или пользовательских идентификационных данных браузера.
package main
import (
"context"
"fmt"
"log"
"os"
"net/http"
"net/url"
"time"
solvethree "solvethree.com/sdk"
)
func main() {
client, err := solvethree.NewClient(os.Getenv("SOLVETHREE_API_KEY"), nil)
if err != nil { log.Fatal(err) }
ctx, cancel := context.WithTimeout(context.Background(), 180*time.Second)
defer cancel()
input := solvethree.TaskRequest{Type: "KasadaTask", URL: "https://www.ticketmaster.com/", Proxy: os.Getenv("SOLVETHREE_PROXY")}
result, err := client.Solve(ctx, input, solvethree.SolveOptions{})
if err != nil { log.Fatal(err) }
fmt.Println("Ready task:", result.ID)
proxy, ok := solvethree.SuccessfulProxy(input, result)
if !ok { log.Fatal("No valid successful proxy") }
proxyURL, err := url.Parse(proxy)
if err != nil { log.Fatal(err) }
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
defer transport.CloseIdleConnections()
targetClient := &http.Client{Transport: transport, Timeout: 30*time.Second,
CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
request, err := http.NewRequestWithContext(ctx, "GET", input.URL, nil)
if err != nil { log.Fatal(err) }
request.Header.Set("User-Agent", result.Solution.UserAgent)
request.Header.Set("sec-ch-ua", result.Solution.SecChUA)
for name, value := range result.Solution.Headers { request.Header.Set(name, value) }
response, err := targetClient.Do(request)
if err != nil { log.Fatal(err) }
defer response.Body.Close()
fmt.Println("Application HTTP status:", response.StatusCode)
// Inspect the application response to determine whether submission succeeded.
}Используйте заголовки, идентификационные данные браузера и прокси вместе
Для Kasada применяйте result.Solution.Headers, а не Solution.Token. Цикл копирует каждый возвращённый заголовок. Предшествующие присваивания также применяют возвращённые UserAgent и SecChUA; не заменяйте их значениями из своего браузера.
SuccessfulProxy(input, result) определяет успешный прокси, а http.ProxyURL направляет через него запрос к целевому сайту. Используйте этот результат, а не выбирайте другой прокси при отправке. Это важно и в том случае, если позже вы переключите задачу на список кандидатов прокси.
Запрос к целевому сайту использует input.URL, поэтому решение и отправка относятся к одному URL. Переход по перенаправлениям отключён: клиент возвращает ответ с перенаправлением вместо автоматической отправки сгенерированных заголовков на другой URL.
Проверьте ответ приложения, прежде чем считать операцию успешной
«Готовая задача» означает, что решение сгенерировано, а не то, что Ticketmaster его принял. Пример выводит HTTP-статус приложения, но интерпретация ответа остаётся за вами. Прежде чем фиксировать успех, проверьте тело ответа и результат, который ожидало ваше приложение.
- Задача готова, но целевой сайт отклоняет запрос.
Проверьте исходящий запрос: его URL, каждый возвращённый заголовок, User-Agent, sec-ch-ua и прокси, выбранный SuccessfulProxy.
Попробуйте: Устраните все несоответствия, прежде чем запрашивать ещё одно решение. Готовое решение не гарантирует его принятия целевым сайтом.
- Solve возвращает ошибку до выполнения запроса к целевому сайту.
Различайте HTTP-ошибку API и окончательное завершение задачи с ошибкой. Задача, завершившаяся с ошибкой, содержит errorCode и error.
Попробуйте: Используйте эти сведения, чтобы исправить запрос, а не повторять попытки с неизменёнными некорректными входными данными. Если вы замените Solve ручным опросом, прекращайте опрос при завершении задачи с ошибкой.
Сведения об ошибках при создании или решении задачи см. в разделе Обработка ошибок API.
Источники и справочник API
Запустите первую задачу.
Начните с $5 на балансе рабочего пространства.