TypeScript'te CAPTCHA görev sonuçlarını güvenli biçimde işleyin
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.
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_KEYveSOLVETHREE_PROXYdeğişkenlerini ayarlayın.!bildirimleri, eksik ortam değişkenlerini çalışma zamanında doğrulamaz. accounts.example.comvelogindeğ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.
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.
Aynı görevi sorgulayın
Durum
pendingveyasolvingolduğu sürece, yerel bir son süre belirleyerek kaydedilen kimliklegetTaskç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.
Nihai sonuçta durun
readydurumunda, istenen ürünün gerektirdiği alanları doğrulayın.faileddurumunda hemerrorCodehem deerroralanı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.
| İstenen ürün | Çözüm değeri | Kullanımı |
|---|---|---|
| reCAPTCHA Enterprise | solution.token | Hedeflenen ana makine adı ve eylem için reCAPTCHA tokenı olarak gönderin. |
| KasadaTask | solution.headers | Dönen üstbilgileri birlikte uygulayın. Bu sonucu token olarak değerlendirmeyin. |
| TicketmasterTmptTask | solution.token | reCAPTCHA 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.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.