Express'te CAPTCHA çözücüyü kullanın

solvethree tarafından3 dk okuma

solvethree istemcisini Express sunucunuzda tutun. Görev oluşturmak için kimlik doğrulamalı bir POST rotası, almak içinse bir GET rotası kullanın. Çağıranların uç noktayı keyfî bir ücretli aktarıcıya dönüştürememesi için hedefi ve proxy'yi sunucu yapılandırmasında sabitleyin.

Bu sayfada

Sunucuyu ve hedefi yapılandırın

Node.js 22 veya üzerini ve Express 5 kullanın. Resmî JavaScript SDK'sının npm kayıt deposunda yayımlandığını varsaymak yerine belgelerdeki tarball kurulumunu kullanarak yükleyin. Örnek, işleyicilerin dışında bir Solvethree istemcisi oluşturur.

  • SOLVETHREE_API_KEY: çalışma alanınızın API anahtarı. Sunucuda tutun.
  • INTEGRATION_KEY: güvenilen dahili çağıranlar için ayrı bir gizli anahtar. Örnek, bu anahtarı x-integration-key başlığında gerektirir; tarayıcı istemcilerine dağıtmayın. Zaten kimlik doğrulama ara yazılımınız varsa örnekteki paylaşılan anahtar denetimi yerine onu kullanın.
  • CAPTCHA_SITE: tam URL değil, hedef ana makine adı. Görev oluşturmadan önce çalışma alanınız için etkin bir site profili ayarlayın; ana makine adı göndermek profil oluşturmaz.
  • SOLVETHREE_PROXY: bu hedef için proxy. Örnek, tek bir proxy sağlar ve eylemi login olarak sabitler. Hedefiniz farklı bir eylem kullanıyorsa bunu sunucu tarafında değiştirin.

Bu istek, varsayılan reCAPTCHA Enterprise yapılandırmasını kullanır. type veya url değil, site, action ve bir proxy gerekir. Hedef henüz yapılandırılmadıysa site profili kurulumuna bakın.

Bir kez oluşturun, ardından görevi alın

Express · kimlik doğrulamalı görev oluşturma ve getirme
// npm install express and the official solvethree SDK tarball.
import express from 'express';
import { Solvethree, SolvethreeError } from '@solvethree/sdk';
const app = express();
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const secret = process.env.INTEGRATION_KEY;
if (!secret) throw new Error('Set INTEGRATION_KEY');
app.use((request, response, next) => {
  if (request.get('x-integration-key') !== secret) return response.sendStatus(401);
  next();
});
app.post('/captcha/tasks', async (request, response) => {
  const task = await client.createTask({
    site: process.env.CAPTCHA_SITE, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
    requestId: request.get('x-request-id'),
  }, { waitMs: 0, signal: AbortSignal.timeout(20000) });
  response.json(task);
});
app.get('/captcha/tasks/:id', async (request, response) => {
  response.json(await client.getTask(request.params.id, { waitMs: 15000, signal: AbortSignal.timeout(25000) }));
});
app.use((error, request, response, next) => {
  if (error instanceof SolvethreeError) return response.status(502).json({ requestId: error.requestId, taskId: error.taskId });
  response.status(400).json({ error: 'Invalid task input or ID' });
});
app.listen(3000);

Her iki rota da kimlik doğrulama denetiminin arkasındadır. POST işleyicisi ana makine adını, eylemi ve proxy'yi istek gövdesinden değil, sunucu yapılandırmasından alır. Çağırandan yalnızca isteğe bağlı oluşturma tanımlayıcısı gelir.

  1. 1.

    Oluşturmadan önce bir istek kimliği atayın

    1–64 ASCII harf, rakam, alt çizgi veya kısa çizgi içeren x-request-id gönderin. Bağlantı zaman aşımına uğrarsa oluşturma işlemini kurtarabilmek için bunu mantıksal istekle birlikte saklayın.

  2. 2.

    /captcha/tasks yoluna bir kez POST gönderin

    İşleyici, waitMs: 0 ile createTask çağrısı yapar ve görevi döndürür. Kimliğini saklayın. Başarılı bir yanıt, bir göreviniz olduğu anlamına gelir; mutlaka bir çözümünüz olduğu anlamına gelmez.

  3. 3.

    GET ile durumu alın

    /captcha/tasks/:id yolunu çağırın. Durum pending veya solving olduğu sürece almaya devam edin; ilerlemeyi kontrol etmek için POST isteğini tekrarlamayın. ready veya failed durumunda durun.

  4. 4.

    Yalnızca hazır bir çözümü kullanın

    Token'ı döndürülen userAgent ve secChUa ile, aynı yapılandırılmış proxy'yi ve amaçlanan hedefi kullanarak gönderin. SDK bunu sizin yerinize göndermez. Hazır bir görev, çözümün üretildiği anlamına gelir; hedefin uygulama isteğinizi kabul ettiği anlamına gelmez.

Başka bir görev oluşturmadan zaman aşımlarını ele alın

POST SDK çağrısının 20 saniyelik bir AbortSignal zaman sınırı vardır. GET, 25 saniyelik SDK çağrısı zaman sınırı içinde görev için 15 saniye beklemeye izin verir. GET yanıtı hâlâ nihai olmayan bir durumda olabilir; beklemenin sona ermesini başarısız çözüm olarak değerlendirmek yerine durumunu inceleyin.

Oluşturma zaman aşımı, solvethree'nin isteği reddettiğini kanıtlamaz. Bir görev kimliği aldıysanız görevi alın. Aksi takdirde mevcut görevi kurtarmak için aynı istek kimliği ve değişmemiş görev girdileriyle oluşturma işlemini tekrarlayın. Bu kimliği farklı girdilerle yeniden kullanmak çakışmaya neden olur. Saklanmış bir istek kimliği olmadan yeni bir POST, ayrı bir iş oluşturma riski taşır.

Express 5, reddedilen asenkron işleyicileri hata ara yazılımına iletir. Örnek, SolvethreeError için HTTP 502 döndürür ve yalnızca istek ile görev tanımlayıcılarını sunar; ham hatayı, kimlik bilgilerini veya çözümü sunmaz. Alternatif HTTP 400 yanıtı geneldir; zaman sınırı hataları dahil SDK dışındaki her hatayı kesin olarak sınıflandırmaz.

Başarılı yanıt verilerini okumadan önce HTTP hatalarını ele alın. Bundan bağımsız olarak, alınan bir görevin durumu failed olabilir: errorCode ve error alanlarını inceleyin, ardından sorgulamayı durdurun. Başarısız çözümlerin ücretleri iade edilir, ancak geçersiz girdileri değiştirmeden yeniden denemek bunları düzeltmez. Bildirilen hatayı teşhis etmek için API hata referansını kullanın.

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

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

Çalışma alanı oluşturun
Express'te CAPTCHA çözücüyü kullanın · solvethree