שימוש בעוגיית TMPT של Ticketmaster ב-Go
השתמשו ב-Solution.Token כערך של קובץ Cookie בשם tmpt. שלחו את הבקשה ליעד דרך הפרוקסי שהצליח עם זהות הדפדפן שהוחזרה. ה-SDK משיג את הפתרון; לקוח ה-HTTP שלכם ב-Go שולח אותו.
בדף הזה
בחירת הפעולה וכתובת היעד המדויקת
צרו 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. אל תחליפו את הערכים האלה בזהות דפדפן לא קשורה ואל תחליפו פרוקסי בין הפתרון לשליחה.
בדיקת תגובת היישום
שני הערכים המודפסים עונים על שאלות שונות: מזהה המשימה המוכנה מזהה את הפתרון שנוצר; סטטוס ה-HTTP של היישום מגיע מהבקשה ליעד. בדקו גם את גוף התגובה וגם את הסטטוס. משימה מוכנה אינה מוכיחה שההתחברות הצליחה, שניתנה גישה לאירוע או שהתאפשרה כניסה לתור.
מעקב אחר הפניות מושבת בדוגמה, כך שתוכלו לבדוק את התגובה הראשונית ואת כותרת Location שלה במקום לראות רק את היעד הסופי.
- המשימה מוכנה, אבל היעד דוחה את הבקשה.
בדקו את קובץ ה-Cookie היוצא, כתובת היעד, הפרוקסי, User-Agent ו-sec-ch-ua.
כדאי לנסות: שלחו את Solution.Token הגולמי בתור tmpt לכתובת ה-URL הרצויה, באמצעות SuccessfulProxy והזהות שהוחזרה עם אותו פתרון.
- הפתרון נכשל לפני בקשת ה-GET ליעד.
טפלו בשגיאה של Solve. במקרה של משימה שנכשלה באופן סופי, בדקו את errorCode ואת error.
כדאי לנסות: הפסיקו לתשאל את המשימה הזו ותקנו את הבעיה שדווחה לפני ניסיון נוסף. אל תניחו שכל כשל מעיד על יתרה לא מספקת.
מקורות ותיעוד API
הפעלת המשימה הראשונה שלך.
התחילו עם $5 בקרדיט לסביבת העבודה.