TypeScript'te CAPTCHA görev sonuçlarını güvenli biçimde işleyin

solvethree tarafından3 dk okuma

result.solution alanını okumadan önce result.status üzerinde switch kullanın. Yalnızca ready kullanılabilir bir çözüm içerir; bu durumda bile istediğiniz ürünün ihtiyaç duyduğu alanları kontrol etmelisiniz: Kasada başlıklar döndürürken reCAPTCHA ve TMPT farklı kullanımlara sahip token'lar döndürür.

Bu sayfada

Çözümü okumadan önce durumu daraltın

Girdi için SDK'nın dışa aktardığı TaskRequest, yanıtlar için TaskResult türünü kullanın. Durumu daraltmak, TypeScript'in tamamlanmamış işi, başarısızlığı ve hazır olma durumunu any veya derleyiciye yalnızca size güvenmesini söyleyen bir tür dönüşümü kullanmadan ayırt etmesini sağlar.

TypeScript · çözümü kullanmadan önce görev durumunun türünü daraltma
import { Solvethree, type TaskRequest, type TaskResult } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY! });
const input: TaskRequest = { site: 'accounts.example.com', action: 'login', proxy: process.env.SOLVETHREE_PROXY! };
function inspect(result: TaskResult): void {
  switch (result.status) {
    case 'pending':
    case 'solving':
      console.log('Retrieve this task again:', result.id);
      return;
    case 'failed':
      console.error('Failed task:', result.id, result.errorCode);
      return;
    case 'ready':
      // Solution fields depend on the requested product; check optional fields.
      if (!result.solution.token || !result.solution.userAgent || !result.solution.secChUa) {
        throw new Error('Expected a complete reCAPTCHA solution');
      }
      console.log('Ready task:', result.id);
      // Submit token privately with its browser identity and original proxy.
      return;
  }
}
inspect(await client.createTask(input, { waitMs: 0 }));
// Save the returned ID and call getTask while pending/solving with a deadline.

Örnek, bir görev oluşturur ve ilk yanıtı inceler. pending ve solving, görevin yeniden sorgulanması gerektiğini belirtir; failed işlemeyi durdurur; ready ise çözüm kontrollerine geçer. Hazır sonuç dalını bir yardımcı fonksiyona ayırırsanız parametresi için dışa aktarılan ReadyTask türünü kullanın. Bu, durumu daraltır ancak ürüne özgü her çözüm alanını zorunlu hâle getirmez.

Bu girdi reCAPTCHA istediği için koruma kontrolleri bir token ve her iki tarayıcı kimliği alanının varlığını denetler. Bunlar, tokenın hedef tarafından kabul edileceğini kanıtlamaz. Örnek, tokenı özellikle yazdırmaz.

  • Node.js 22+ ve API belgelerinde açıklanan resmî SDK tarball kurulumunu kullanın; npm kayıt deposunda bir sürüm bulunduğunu varsaymayın.
  • Sunucu ortamında SOLVETHREE_API_KEY ve SOLVETHREE_PROXY değişkenlerini ayarlayın. ! bildirimleri, eksik ortam değişkenlerini çalışma zamanında doğrulamaz.
  • accounts.example.com ve login değerlerini hedeflenen ana makine adı ve eylemle değiştirin. Sitenin çalışma alanında zaten etkin bir profili bulunmalıdır; site profili kurulumuna bakın.

Yeni bir görevi değil, kaydedilen kimliği sorgulayın

Örnek, düzenli sorgulamayı çağıran koda bırakır. Oluşturma işlemini bu döngünün dışında tutun: İlk görevin tamamlanıp tamamlanmadığını kontrol etmek için createTask yeniden çağrılmaz.

  1. 1.

    Oluşturma sonucundaki kimliği kaydedin

    Dönen kimliği sorgulamada kullanmadan önce boş olmayan bir dize olduğunu kontrol edin. Başarılı proxy'yi seçerken de ihtiyaç duyacağınız özgün istekle ilişkisini koruyun.

  2. 2.

    Aynı görevi sorgulayın

    Durum pending veya solving olduğu sürece, yerel bir son süre belirleyerek kaydedilen kimlikle getTask çağrısı yapın. Her yanıtı işlemeden önce yanıtın kimliğinin kaydedilen kimlikle eşleştiğini kontrol edin. Kimliğin eşleşmesi, hangi görevi işlediğinizi belirler; görevin başarılı olup olmadığını değil.

  3. 3.

    Nihai sonuçta durun

    ready durumunda, istenen ürünün gerektirdiği alanları doğrulayın. failed durumunda hem errorCode hem de error alanını inceleyin, ardından bu görevi sorgulamayı bırakın. İstek hatalarını ayrı ele alın: Başarısız bir sorgulama isteği, tek başına görevin nihai olarak başarısız olduğu anlamına gelmez.

Kimliği almadan önce oluşturma işlemi zaman aşımına uğrarsa görev oluşturulmadığını varsaymayın. Bir requestId sağladıysanız aynı isteği aynı değerle yeniden göndermek mevcut görevi geri getirir. Bu değeri değiştirilmiş girdilerle yeniden kullanmak çakışmaya yol açar; yeni bir değer üretmek özgün görevi geri getirmez.

Hazır bir sonuç için de doğru ürün işleyicisi gerekir

İşleyiciyi özgün isteğe göre seçin, ardından beklenen çözüm alanlarını kontrol edin. Yalnızca bir tokenın bulunması, reCAPTCHA yanıtını TMPT çerez değerinden ayırt etmeye yetmez.

Tür ready durumuna daraltıldıktan sonra kullanılacak değerler
Tür ready durumuna daraltıldıktan sonra kullanılacak değerler
İstenen ürünÇözüm değeriKullanımı
reCAPTCHA Enterprisesolution.tokenHedeflenen ana makine adı ve eylem için reCAPTCHA tokenı olarak gönderin.
KasadaTasksolution.headersDönen üstbilgileri birlikte uygulayın. Bu sonucu token olarak değerlendirmeyin.
TicketmasterTmptTasksolution.tokenreCAPTCHA tokenı olarak değil, ham tmpt çerez değeri olarak kullanın.

Bağımsız Kasada şu anda yalnızca www.ticketmaster.com üzerindeki HTTPS hedeflerini destekler; rastgele siteleri desteklemez. Üstbilgi işleyicisi evrensel bir Kasada entegrasyonu değildir.

Her ürün için dönen userAgent ve secChUa değerleriyle ve başarılı proxy üzerinden gönderim yapın. Proxy adayları kullanıyorsanız ilk adayın başarılı olduğunu varsaymak yerine successfulProxy(originalTask, readyResult) kullanın. SDK, çözümü sizin yerinize hedefe uygulamaz ve ready, sonraki isteğin kabul edileceğini garanti etmez.

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

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

Çalışma alanı oluşturun
TypeScript'te CAPTCHA görev sonuçlarını güvenli biçimde işleyin · solvethree