Go ile Kasada üst bilgileri oluşturun ve uygulayın

solvethree tarafından3 dk okuma

Bir KasadaTask oluşturun, ardından döndürülen başlık kümesinin tamamını ve tarayıcı kimliğini başarılı proxy üzerinden gönderin. Resmî Go SDK'sı çözümü oluşturur; hedef isteğini ise net/http istemciniz yapar. Yerel tarayıcı veya eklenti gerekmez.

Bu sayfada

Go örneğini yapılandırın ve çalıştırın

Go 1.22 veya üzerini kullanın ve resmî modülü solvethree.com/[email protected] adresinden yükleyin. Go entegrasyon belgeleri kurulum adımlarını açıklar.

Bağımsız Kasada şu anda yalnızca tam olarak www.ticketmaster.com ana makine adındaki HTTPS hedeflerini destekler. Örnek, bu sitenin ana sayfasını ister; input.URL değerini desteklenen bu ana makinedeki hedef URL ile değiştirin.

  • SOLVETHREE_API_KEY değerini çalışma alanınızın API anahtarı olarak ayarlayın. Anahtarı sunucuda tutun.
  • SOLVETHREE_PROXY değerini yol, sorgu veya parça içermeyen bir HTTP ya da HTTPS proxy URL'si olarak ayarlayın. Bu örnek tek bir proxy kullanır; ayrıca ProxyCandidates sağlamayın.
  • Type değerini KasadaTask olarak tutun. Site, Action, RecaptchaType, oturum veya özel tarayıcı kimliği alanları eklemeyin.
Go · Kasada başlık kümesinin tamamını uygulama
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.

}

Başlıkları, tarayıcı kimliğini ve proxy'yi birlikte tutun

Kasada için Solution.Token değil, result.Solution.Headers uygulayın. Döngü, döndürülen tüm başlıkları kopyalar. Önceki atamalar, döndürülen UserAgent ve SecChUA değerlerini de uygular; bunları kendi tarayıcınızdan aldığınız değerlerle değiştirmeyin.

SuccessfulProxy(input, result) başarılı proxy'yi belirler ve http.ProxyURL hedef isteğini bu proxy üzerinden yönlendirir. Gönderim sırasında başka bir proxy seçmek yerine bu sonucu kullanın. Daha sonra görevi proxy adaylarını kullanacak şekilde değiştirirseniz de bu önemlidir.

Hedef isteği input.URL kullanır; dolayısıyla çözüm ve gönderim aynı URL'yi hedefler. Yönlendirmeleri takip etme devre dışıdır: istemci, oluşturulan başlıkları otomatik olarak başka bir URL'ye göndermek yerine yönlendirme yanıtını döndürür.

Başarılı saymadan önce uygulama yanıtını kontrol edin

“Hazır görev”, bir çözüm oluşturulduğu anlamına gelir; Ticketmaster'ın bunu kabul ettiği anlamına gelmez. Örnek, uygulamanın HTTP durumunu yazdırır ancak yanıtı yorumlamayı size bırakır. Başarı kaydı oluşturmadan önce yanıt gövdesini ve uygulamanızın beklediği sonucu inceleyin.

Görev hazır, ancak hedef isteği reddediyor.

Giden isteği inceleyin: URL'sini, döndürülen tüm başlıkları, User-Agent, sec-ch-ua değerlerini ve SuccessfulProxy tarafından seçilen proxy'yi kontrol edin.

Şunu deneyin: Başka bir çözüm istemeden önce tüm uyumsuzlukları düzeltin. Hazır bir çözüm, hedefin bunu kabul edeceğini garanti etmez.

Solve, hedef isteği çalıştırılmadan önce hata döndürüyor.

API HTTP hatasını, son duruma ulaşmış bir görev başarısızlığından ayırt edin. Başarısız bir görev errorCode ve error alanlarını içerir.

Şunu deneyin: Geçersiz girdileri değiştirmeden yeniden denemek yerine bu ayrıntıları kullanarak isteği düzeltin. Solve yerine elle durum sorgulama kullanırsanız görev başarısız olduğunda sorgulamayı durdurun.

Görev oluşturma veya çözüm sırasında oluşan hatalar için API hata yönetimi bölümüne bakın.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
Go ile Kasada üst bilgileri oluşturun ve uygulayın · solvethree