Использование cookie TMPT Ticketmaster с Go
Используйте Solution.Token как значение cookie с именем tmpt. Отправьте запрос к целевому сайту через успешный прокси с возвращёнными идентификационными данными браузера. SDK получает решение; ваш HTTP-клиент на Go отправляет его.
На этой странице
Выберите действие и точный целевой URL
Создайте TaskRequest, указав для Type значение TicketmasterTmptTask, целевой URL, Action и входные данные прокси.
- Для события используйте
Eventи точный URL события, который собираетесь запросить. - Для входа используйте
Loginи URL начальной страницы входа.
Не отправляйте Site, RecaptchaType или поле сессии. TMPT возвращает исходное значение cookie, а не токен reCAPTCHA или объект заголовков Kasada.
Получите решение, затем отправьте запрос к целевому сайту
Используйте Go 1.22 или новее и официальный модуль solvethree.com/sdk версии v0.1.0. Подробности установки приведены в документации по интеграции с Go. Задайте в SOLVETHREE_API_KEY ключ рабочего пространства, а в SOLVETHREE_PROXY — URL прокси. Храните API-ключ на сервере.
В примере используется Login. Для события перед решением измените Action на Event и замените URL на точный URL события. Для входа убедитесь, что URL — это нужный URL начальной страницы входа. Последующий GET использует тот же input.URL.
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: "TicketmasterTmptTask", URL: "https://www.ticketmaster.com/", Action: "Login", 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)
request.AddCookie(&http.Cookie{Name: "tmpt", Value: result.Solution.Token})
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.
}SuccessfulProxy выбирает прокси для отправки. Пример настраивает этот прокси в клонированном http.Transport, копирует Solution.UserAgent и Solution.SecChUA в заголовки запроса и добавляет Solution.Token как cookie tmpt. Не заменяйте эти значения посторонними идентификационными данными браузера и не меняйте прокси между решением и отправкой.
Проверьте ответ приложения
Два выводимых значения отвечают на разные вопросы: ID готовой задачи идентифицирует сгенерированное решение, а HTTP-статус приложения получен из запроса к целевому сайту. Проверяйте не только статус, но и тело ответа. Готовая задача не подтверждает вход, доступ к событию или допуск в очередь.
В примере переход по перенаправлениям отключён, чтобы вы могли проверить первоначальный ответ и его заголовок Location, а не видеть только конечный адрес.
- Задача готова, но целевой сайт отклоняет запрос.
Проверьте отправляемый cookie, целевой URL, прокси, User-Agent и sec-ch-ua.
Попробуйте: Отправьте исходное значение Solution.Token как tmpt на нужный URL, используя SuccessfulProxy и идентификационные данные, возвращённые вместе с этим решением.
- Решение завершается с ошибкой до GET-запроса к целевому сайту.
Обработайте ошибку Solve. При окончательном завершении задачи с ошибкой проверьте errorCode и error.
Попробуйте: Прекратите опрос этой задачи и устраните указанную проблему перед повторной попыткой. Не считайте, что любой сбой означает недостаточный баланс.
Источники и справочник API
Запустите первую задачу.
Начните с $5 на балансе рабочего пространства.