إنشاء ترويسات Kasada وتطبيقها باستخدام Go

بقلم solvethreeمدة القراءة: 3 دقيقة

أنشئ KasadaTask، ثم أرسل مجموعة الترويسات المُعادة كاملةً وهوية المتصفح عبر الوكيل الناجح. تنشئ حزمة SDK الرسمية للغة Go الحل؛ وينفّذ عميل net/http لديك الطلب إلى الموقع المستهدف. لا حاجة إلى متصفح محلي أو مكوّن إضافي.

في هذه الصفحة

إعداد مثال Go وتشغيله

استخدم Go 1.22 أو أحدث وثبّت الوحدة الرسمية solvethree.com/[email protected]. توضح وثائق التكامل مع Go خطوات التثبيت.

يدعم Kasada المستقل حاليًا أهداف HTTPS على اسم المضيف المحدد www.ticketmaster.com فقط. يطلب المثال صفحته الرئيسية؛ غيّر input.URL إلى عنوان URL المقصود على ذلك المضيف المدعوم.

  • اضبط SOLVETHREE_API_KEY على مفتاح API لمساحة عملك. احتفظ به على الخادم.
  • اضبط SOLVETHREE_PROXY على عنوان URL لوكيل HTTP أو HTTPS دون مسار أو استعلام أو جزء fragment. يستخدم هذا المثال وكيلًا واحدًا؛ فلا تمرّر ProxyCandidates أيضًا.
  • أبقِ Type مضبوطًا على KasadaTask. لا تُضف Site أو Action أو RecaptchaType أو حقول الجلسة أو هوية المتصفح المخصصة.
Go · تطبيق مجموعة ترويسات Kasada كاملة
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 للتعامل مع الإخفاقات أثناء إنشاء المهمة أو حلّها.

شغّل مهمتك الأولى.

ابدأ برصيد قدره $5 في مساحة العمل.

إنشاء مساحة عمل
إنشاء ترويسات Kasada وتطبيقها باستخدام Go · solvethree