Запрос и использование cookie TMPT с помощью cURL
Используйте TicketmasterTmptTask для запроса cookie TMPT. Возвращённое значение solution.token — это само значение cookie: отправляйте его как cookie tmpt, а не как токен reCAPTCHA или полный заголовок Set-Cookie. Для запроса к целевому серверу используйте возвращённые идентификационные данные браузера и тот же прокси.
На этой странице
Задайте действие и точный целевой URL
- Для
Eventукажите вurlточный URL события. - Для
Loginукажите вurlадрес точки входа в процесс авторизации. - Укажите для этого скрипта один прокси. Он повторно использует этот прокси при отправке cookie целевому серверу.
- Не включайте
site,recaptchaTypeилиsessionв задачу TMPT.
В примере используются Login и URL главной страницы Ticketmaster в качестве заглушки. Замените URL задачи и целевой адрес финального вызова cURL на фактические URL вашего поддерживаемого сценария. Если вы запрашиваете cookie для события, также измените действие на Event.
Создайте задачу, опрашивайте её и примените cookie
Запускайте скрипт на сервере с Bash, cURL 7.76 или новее, jq и openssl. Укажите в SOLVETHREE_API_KEY API-ключ рабочего пространства, а в SOLVETHREE_PROXY — URL прокси. Не включайте трассировку команд оболочки: она может раскрыть ключ, учётные данные прокси и cookie.
#!/usr/bin/env bash
set -euo pipefail
: "${SOLVETHREE_API_KEY:?Set the API key}" "${SOLVETHREE_PROXY:?Set the proxy}"
# Requires bash, curl, jq and openssl. Do not enable shell tracing.
work=$(mktemp -d)
chmod 700 "$work"
trap 'rm -rf "$work"' EXIT
request_id=$(openssl rand -hex 16)
printf 'Recovery requestId=%s\n' "$request_id"
printf 'Authorization: Bearer %s\n' "$SOLVETHREE_API_KEY" > "$work/auth"
jq -n --arg proxy "$SOLVETHREE_PROXY" --arg id "$request_id" '{"type":"TicketmasterTmptTask","url":"https://www.ticketmaster.com/","action":"Login","proxy":$proxy,"requestId":$id}' > "$work/input.json"
api='https://api.solvethree.com/v1'
curl --fail-with-body --silent --show-error --max-time 30 \
--header @"$work/auth" --header 'Content-Type: application/json' \
--data-binary @"$work/input.json" --output "$work/result.json" "$api/tasks?waitMs=0"
task_id=$(jq -er '.id' "$work/result.json")
encoded_id=$(jq -nr --arg id "$task_id" '$id|@uri')
printf 'Recovery taskId=%s\n' "$task_id"
deadline=$((SECONDS + 180))
while [[ $(jq -r '.status' "$work/result.json") =~ ^(pending|solving)$ ]]; do
remaining=$((deadline - SECONDS))
(( remaining > 0 )) || { echo 'Local deadline reached; resume the saved task ID' >&2; exit 1; }
timeout=$((remaining < 25 ? remaining : 25))
curl --fail-with-body --silent --show-error --max-time "$timeout" \
--header @"$work/auth" --output "$work/result.json" "$api/tasks/$encoded_id?waitMs=15000"
[[ $(jq -r '.status' "$work/result.json") =~ ^(pending|solving)$ ]] && sleep 1 || true
done
[[ $(jq -r '.status' "$work/result.json") == ready ]] || { echo 'Solver task failed' >&2; exit 1; }
user_agent=$(jq -er '.solution.userAgent' "$work/result.json")
client_hints=$(jq -er '.solution.secChUa' "$work/result.json")
cookie=$(jq -er '.solution.token' "$work/result.json")
curl --silent --show-error --max-time 30 --proxy "$SOLVETHREE_PROXY" \
--cookie "tmpt=$cookie" --user-agent "$user_agent" \
--header "sec-ch-ua: $client_hints" --output "$work/target-response" \
--write-out 'Target HTTP %{http_code}\n' 'https://www.ticketmaster.com/'
# Inspect the application's response before treating the operation as successful.
# Replace the example target path with the actual supported workflow URL.Скрипт аутентифицируется с помощью ключа Bearer, создаёт одну задачу через POST /v1/tasks, затем опрашивает только возвращённый для неё ID через GET /v1/tasks/:id. И pending, и solving означают, что опрос нужно продолжать; только ready предоставляет пригодное для использования решение.
Тайм-аут запроса создания составляет 30 секунд. Цикл опроса перед каждым запросом проверяет локальный лимит в 180 секунд и ограничивает отдельные запросы опроса максимумом в 25 секунд. Достижение этого лимита останавливает скрипт, но не подтверждает сбой удалённой задачи.
Для запроса к целевому серверу параметр cURL --cookie формирует заголовок Cookie из самого значения токена. Скрипт также применяет solution.userAgent, solution.secChUa и исходный прокси. Он не включает ни автоматические повторы, ни переходы по перенаправлениям.
Восстановите задачу или исправьте запрос, завершающийся ошибкой
- Тайм-аут создания задачи наступает до вывода её ID.
Тайм-аут соединения не доказывает, что API не удалось создать задачу.
Попробуйте: Сохраните выведенный requestId и исходные входные данные задачи. Повторно отправьте те же данные с этим requestId, чтобы восстановить существующую задачу, а не создавать новую логическую задачу. Изменение данных при повторном использовании ID вызывает конфликт.
- Вызов API возвращает неуспешный HTTP-ответ.
Это ошибка уровня HTTP, а не статус задачи. Параметр --fail-with-body в скрипте завершает вызов с ошибкой, сохраняя тело ответа.
Попробуйте: Проверьте сохранённый ответ API до удаления временных файлов. Исправьте указанную проблему, а не разбирайте ответ как успешную задачу и не повторяйте вслепую неизменные входные данные.
- Скрипт сообщает о сбое задачи решения.
Скрипт выводит общее сообщение об ошибке; неудачная задача содержит errorCode и error.
Попробуйте: Возьмите выведенный ID задачи и проверьте эти поля. Прекратите опрос неудачной задачи. За неудачные решения средства возвращаются.
- Истекает локальный лимит времени опроса.
Задача всё ещё может находиться в состоянии pending или solving.
Попробуйте: Возобновите получение данных с помощью выведенного ID задачи. Не создавайте новую задачу лишь потому, что локальный скрипт прекратил ожидание.
- Задача готова, но целевой сайт отклоняет запрос.
Проверьте исходящий cookie, user agent, client hints, прокси и целевой URL, а не только статус решения.
Попробуйте: Убедитесь, что cookie tmpt содержит solution.token без префикса Set-Cookie и атрибутов. Используйте возвращённые идентификационные данные и исходный прокси, а также проверьте, соответствует ли целевой URL нужному сценарию.
Источники и справочник API
Запустите первую задачу.
Начните с $5 на балансе рабочего пространства.