GoでTicketmaster TMPT Cookieを使用する

著者:solvethree読了時間:1分

Solution.Token を、tmpt という名前の Cookie の値として使用します。返されたブラウザー識別情報を使い、成功したプロキシ経由で対象サイトへのリクエストを送信してください。SDK が解決結果を取得し、Go の HTTP クライアントがそれを送信します。

このページの内容

アクションと正確な対象 URL を選ぶ

Type を TicketmasterTmptTask に設定し、対象の URL、Action、プロキシ入力を指定して TaskRequest を作成します。

  • イベントの場合は、Event と、リクエストするイベントの正確な URL を使用します。
  • サインインの場合は、Login とサインイン開始 URL を使用します。

Site、RecaptchaType、セッションフィールドは送信しないでください。TMPT は、reCAPTCHA トークンや Kasada ヘッダーオブジェクトではなく、生の Cookie 値を返します。

解決してから対象サイトへのリクエストを送信する

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 を使用します。

Go · 生のTMPT Cookieを送信
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 を tmpt Cookie として付加します。これらの値を無関係なブラウザー識別情報に置き換えたり、解決から送信までの間にプロキシを切り替えたりしないでください。

アプリケーションのレスポンスを確認する

出力される 2 つの値は、それぞれ異なる情報を示します。ready 状態のタスク ID は生成された解決結果を識別し、アプリケーションの HTTP ステータスは対象サイトへのリクエストから得られます。ステータスだけでなく、レスポンス本文も確認してください。タスクが ready であっても、ログイン、イベントへのアクセス、待機列への参加ができたことの証明にはなりません。

この例ではリダイレクトの追跡を無効にしているため、最終的な移動先だけでなく、最初のレスポンスとその Location ヘッダーを確認できます。

タスクは ready だが、対象サイトがリクエストを拒否する。

送信する Cookie、対象 URL、プロキシ、User-Agent、sec-ch-ua を確認してください。

試してみましょう: SuccessfulProxy と、その解決結果とともに返された識別情報を使用し、生の Solution.Token を tmpt として目的の URL に送信してください。

対象サイトへの GET の前に解決処理が失敗する。

Solve のエラーを処理してください。終端状態の失敗タスクでは、errorCode と error を確認します。

試してみましょう: そのタスクのポーリングを停止し、報告された問題を修正してから再試行してください。すべての失敗がクレジット不足を意味するとは限りません。

最初のタスクを実行しましょう。

$5のワークスペースクレジットで始められます。

ワークスペースを作成
GoでTicketmaster TMPT Cookieを使用する · solvethree