יצירה והחלה של כותרות Kasada באמצעות Go
צרו KasadaTask, ואז שלחו את כל הכותרות שהוחזרו ואת זהות הדפדפן דרך הפרוקסי שהצליח. ה-SDK הרשמי ל-Go יוצר את הפתרון; לקוח ה-net/http שלכם שולח את הבקשה ליעד. אין צורך בדפדפן מקומי או בתוסף.
בדף הזה
הגדרה והפעלה של דוגמת Go
השתמשו ב-Go 1.22 ואילך והתקינו את המודול הרשמי בגרסה solvethree.com/[email protected]. תיעוד האינטגרציה ל-Go מפרט את ההתקנה.
Kasada עצמאי תומך כרגע ביעדי HTTPS בשם המארח המדויק www.ticketmaster.com. הדוגמה מבקשת את דף הבית שלו; שנו את input.URL לכתובת הרצויה במארח הנתמך הזה.
- הגדירו את
SOLVETHREE_API_KEYלמפתח ה-API של סביבת העבודה שלכם. שמרו אותו בשרת. - הגדירו את
SOLVETHREE_PROXYלכתובת URL של פרוקסי HTTP או HTTPS ללא נתיב, שאילתה או מקטע. דוגמה זו משתמשת בפרוקסי אחד; אל תספקו גםProxyCandidates. - השאירו את
Typeמוגדר ל-KasadaTask. אל תוסיפוSite, Action, RecaptchaType, שדה סשן או שדות של זהות דפדפן מותאמת אישית.
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: "KasadaTask", URL: "https://www.ticketmaster.com/", 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)
for name, value := range result.Solution.Headers { request.Header.Set(name, value) }
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.
}שמירה על הכותרות, זהות הדפדפן והפרוקסי יחד
עבור Kasada, החילו את result.Solution.Headers, ולא את Solution.Token. הלולאה מעתיקה כל כותרת שהוחזרה. ההשמות הקודמות מחילות גם את UserAgent ואת SecChUA שהוחזרו; אל תחליפו אותם בערכים מהדפדפן שלכם.
SuccessfulProxy(input, result) מזהה את הפרוקסי שהצליח, ו-http.ProxyURL מנתב דרכו את הבקשה ליעד. השתמשו בתוצאה הזו במקום לבחור פרוקסי אחר בזמן השליחה. הדבר חשוב גם אם בהמשך תעברו לשימוש במועמדי פרוקסי במשימה.
הבקשה ליעד משתמשת ב-input.URL, כך שהפתרון והשליחה מתייחסים לאותה כתובת URL. מעקב אחר הפניות מושבת: הלקוח מחזיר את תגובת ההפניה במקום לשלוח אוטומטית את הכותרות שנוצרו לכתובת URL אחרת.
בדיקת תגובת היישום לפני הכרזה על הצלחה
״משימה מוכנה״ פירושה שנוצר פתרון, לא ש-Ticketmaster קיבל אותו. הדוגמה מדפיסה את סטטוס ה-HTTP של היישום, אבל משאירה לכם את פירוש התגובה. בדקו את גוף התגובה ואת התוצאה שהיישום שלכם ציפה לה לפני רישום הצלחה.
- המשימה מוכנה, אבל היעד דוחה את הבקשה.
בדקו את הבקשה היוצאת: כתובת ה-URL שלה, כל כותרת שהוחזרה, User-Agent, sec-ch-ua והפרוקסי שנבחר על ידי SuccessfulProxy.
כדאי לנסות: תקנו כל אי-התאמה לפני בקשת פתרון נוסף. פתרון מוכן אינו מבטיח קבלה בהמשך התהליך.
- Solve מחזירה שגיאה לפני שהבקשה ליעד מתבצעת.
הבחינו בין שגיאת HTTP של ה-API לבין כשל סופי במשימה. משימה שנכשלה כוללת errorCode ו-error.
כדאי לנסות: השתמשו בפרטים האלה כדי לתקן את הבקשה במקום לנסות שוב עם אותם קלטים לא תקינים. אם תחליפו את Solve בתשאול ידני, הפסיקו לתשאל כשהמשימה נכשלת.
ראו טיפול בשגיאות API למידע על כשלים במהלך יצירת משימה או פתרונה.
מקורות ותיעוד API
הפעלת המשימה הראשונה שלך.
התחילו עם $5 בקרדיט לסביבת העבודה.