Kasada-Header mit Go generieren und anwenden
Erstellen Sie eine KasadaTask und senden Sie dann den vollständigen zurückgegebenen Header-Satz und die Browseridentität über den erfolgreichen Proxy. Das offizielle Go SDK generiert die Lösung; Ihr net/http-Client stellt die Zielanfrage. Ein lokaler Browser oder ein Plugin ist nicht erforderlich.
Auf dieser Seite
Go-Beispiel konfigurieren und ausführen
Verwenden Sie Go 1.22 oder neuer und installieren Sie das offizielle Modul unter solvethree.com/[email protected]. Die Dokumentation zur Go-Integration beschreibt die Installation.
Eigenständiges Kasada unterstützt derzeit HTTPS-Ziele mit exakt dem Hostnamen www.ticketmaster.com. Das Beispiel ruft dessen Startseite ab; ändern Sie input.URL in die gewünschte URL auf diesem unterstützten Host.
- Setzen Sie
SOLVETHREE_API_KEYauf den API-Schlüssel Ihres Arbeitsbereichs. Bewahren Sie ihn auf dem Server auf. - Setzen Sie
SOLVETHREE_PROXYauf eine HTTP- oder HTTPS-Proxy-URL ohne Pfad, Abfrage oder Fragment. Dieses Beispiel verwendet einen Proxy; geben Sie nicht zusätzlichProxyCandidatesan. - Lassen Sie
TypeaufKasadaTaskgesetzt. Fügen Sie keine Felder fürSite,Action,RecaptchaType, Sitzungen oder benutzerdefinierte Browseridentitäten hinzu.
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.
}Header, Browseridentität und Proxy zusammenhalten
Wenden Sie für Kasada result.Solution.Headers an, nicht Solution.Token. Die Schleife kopiert jeden zurückgegebenen Header. Die vorhergehenden Zuweisungen wenden auch die zurückgegebenen Werte UserAgent und SecChUA an; ersetzen Sie diese nicht durch Werte Ihres eigenen Browsers.
SuccessfulProxy(input, result) identifiziert den erfolgreichen Proxy, und http.ProxyURL leitet die Zielanfrage darüber. Verwenden Sie dieses Ergebnis, statt bei der Übermittlung einen anderen Proxy auszuwählen. Das ist auch wichtig, wenn Sie die Aufgabe später auf Proxy-Kandidaten umstellen.
Die Zielanfrage verwendet input.URL, sodass Lösungsvorgang und Übermittlung dieselbe URL adressieren. Das Folgen von Weiterleitungen ist deaktiviert: Der Client gibt die Weiterleitungsantwort zurück, statt die generierten Header automatisch an eine andere URL zu senden.
Anwendungsantwort prüfen, bevor Sie den Vorgang als erfolgreich werten
Eine „bereite Aufgabe“ bedeutet, dass eine Lösung generiert wurde, nicht, dass Ticketmaster sie akzeptiert hat. Das Beispiel gibt den HTTP-Status der Anwendung aus, überlässt Ihnen aber die Interpretation der Antwort. Prüfen Sie den Antworttext und das von Ihrer Anwendung erwartete Ergebnis, bevor Sie einen Erfolg vermerken.
- Die Aufgabe ist bereit, aber das Ziel lehnt die Anfrage ab.
Prüfen Sie die ausgehende Anfrage: ihre URL, jeden zurückgegebenen Header, User-Agent, sec-ch-ua und den von SuccessfulProxy ausgewählten Proxy.
Probiere Folgendes: Korrigieren Sie alle Abweichungen, bevor Sie einen weiteren Lösungsvorgang anfordern. Eine bereite Lösung garantiert keine Annahme durch das nachgelagerte System.
- Solve gibt einen Fehler zurück, bevor die Zielanfrage ausgeführt wird.
Unterscheiden Sie zwischen einem HTTP-Fehler der API und einem endgültigen Aufgabenfehler. Eine fehlgeschlagene Aufgabe enthält errorCode und error.
Probiere Folgendes: Verwenden Sie diese Details, um die Anfrage zu korrigieren, statt es mit unveränderten ungültigen Eingaben erneut zu versuchen. Wenn Sie Solve durch manuelle Statusabfragen ersetzen, beenden Sie diese, sobald die Aufgabe fehlschlägt.
Informationen zu Fehlern beim Erstellen oder Lösen von Aufgaben finden Sie unter API-Fehlerbehandlung.
Quellen und API-Referenz
Führe deinen ersten Task aus.
Starte mit $5 Workspace-Guthaben.