在 Go 中使用 Ticketmaster TMPT Cookie
将 Solution.Token 用作名为 tmpt 的 Cookie 的值。使用返回的浏览器身份,通过成功使用的代理发送目标请求。SDK 获取解决方案;你的 Go HTTP 客户端负责提交。
本页内容
选择操作和准确的目标 URL
创建 TaskRequest,将 Type 设置为 TicketmasterTmptTask,并提供目标 URL、Action 和代理输入。
- 对于活动,使用
Event和你打算请求的准确活动 URL。 - 对于登录,使用
Login和登录入口 URL。
不要发送 Site、RecaptchaType 或会话字段。TMPT 返回的是原始 Cookie 值,而不是 reCAPTCHA 令牌或 Kasada 请求头对象。
先求解,再发送目标请求
使用 Go 1.22 或更高版本,以及版本为 v0.1.0 的官方模块 solvethree.com/sdk。安装详情请参阅 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 附加为 tmpt Cookie。不要将这些值替换为无关的浏览器身份,也不要在求解与提交之间切换代理。
检查应用响应
打印的两个值回答不同的问题:就绪任务的 ID 标识生成的解决方案;应用的 HTTP 状态来自目标请求。请同时检查响应正文和状态。任务就绪并不能证明已登录、已获得活动访问权限或已进入队列。
示例禁用了自动跟随重定向,因此你可以检查初始响应及其 Location 响应头,而不是只看到最终目标。
- 任务已就绪,但目标拒绝请求。
检查发出的 Cookie、目标 URL、代理、User-Agent 和 sec-ch-ua。
试试这样做: 使用 SuccessfulProxy 和随解决方案返回的身份,将原始 Solution.Token 作为 tmpt 发送到预期 URL。
- 目标 GET 执行前,求解失败。
处理 Solve 错误。对于已进入终态的失败任务,检查 errorCode 和 error。
试试这样做: 停止轮询该任务,并在重试前修正报告的问题。不要认为所有失败都意味着余额不足。
来源与 API 参考
运行您的第一个任务。
使用 $5 工作区额度开始体验。