cURL で TMPT Cookie をリクエストして使用する
TicketmasterTmptTask を使って TMPT Cookie をリクエストします。返される solution.token は Cookie の生の値です。reCAPTCHA トークンや完全な Set-Cookie ヘッダーとしてではなく、tmpt Cookie として送信してください。ターゲットへのリクエストには、返されたブラウザー識別情報と同じプロキシを使用してください。
このページの内容
アクションと正確なターゲット URL を設定する
Eventの場合は、urlに正確なイベント URL を設定します。Loginの場合は、urlにサインインの入口となる URL を設定します。- このスクリプトには単一のプロキシを指定してください。ターゲットに Cookie を送信する際も、そのプロキシを再利用します。
- TMPT タスクに
site、recaptchaType、sessionを含めないでください。
この例では、Login とプレースホルダーの Ticketmaster ホームページ URL を使用しています。タスク 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 で 1 つのタスクを作成して、GET /v1/tasks/:id で返された 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 を取得し、これらのフィールドを確認してください。失敗したタスクのポーリングは停止してください。失敗した解決処理の料金は返金されます。
- ローカルのポーリング期限が切れる。
タスクはまだ待機中または解決中の可能性があります。
試してみましょう: 出力されたタスク ID を使って取得を再開してください。ローカルのスクリプトが待機を停止したというだけで、別のタスクを作成しないでください。
- タスクは ready だが、対象サイトがリクエストを拒否する。
ソルバーのステータスだけでなく、送信される Cookie、ユーザーエージェント、クライアントヒント、プロキシ、ターゲット URL を確認してください。
試してみましょう: tmpt Cookie に、Set-Cookie のプレフィックスや属性を付けずに solution.token が含まれていることを確認してください。返された識別情報と元のプロキシを使用し、ターゲット URL が意図したワークフローに一致しているか確認してください。
参照元とAPIリファレンス
最初のタスクを実行しましょう。
$5のワークスペースクレジットで始められます。