Cloudflare Workers'tan CAPTCHA API'sini çağırın

solvethree tarafından3 dk okuma

Sunucu tarafında fetch ile solvethree görev API'sini çağırmak için bir Worker kullanın. Çalışma alanı API anahtarını bir gizli değer bağlamasında saklayın, hedef girdilerini Worker içinde sabitleyin ve görev yanıtlarını yalnızca yetkilendirdiğiniz çağıran uygulamaya döndürün.

Bu sayfada

Hedefi ve gizli değerleri yapılandırın

Önce konsolda hedef sitenin profilini çalışma alanınız için etkinleştirin. Ana makine adı ve eylem göndermek profil oluşturmaz. Bu ön koşul tamamlanmadıysa site profili kurulumu belgesine bakın.

  • SOLVETHREE_API_KEY: Worker gizli değeri olarak saklanan çalışma alanı API anahtarınız.
  • INTEGRATION_KEY: çağıran uygulamanızın x-integration-key içinde göndermesi gereken ayrı bir gizli değer.
  • SOLVETHREE_PROXY: çözüm için kullanılan proxy URL'si. Kimlik bilgileri içeriyorsa gizli değer olarak saklayın.
  • CAPTCHA_SITE: tam URL değil, hedef ana makine adı.

Örnek, eylemi login olarak sabitler ve tek bir proxy sağlar. Dağıtılan bu girdileri entegrasyonunuza uyacak şekilde değiştirin; çağıranlardan keyfî hedef girdileri kabul etmeyin. recaptchaType belirtilmediğinde API varsayılan olarak reCAPTCHA Enterprise v3 kullanır.

Entegrasyon anahtarını güvenilir bir çağıran uygulama ile Worker arasında kullanın; herkese dağıtılan tarayıcı koduna koymayın. Bu, paylaşılan bir kimlik bilgisidir; kullanıcı bazında görev yetkilendirmesi değildir.

Görev oluşturun ve getirin

Worker · kimlik doğrulamalı oluşturma/getirme REST çağrıları
export default {
  async fetch(request, env) {
    if (!env.INTEGRATION_KEY || request.headers.get('x-integration-key') !== env.INTEGRATION_KEY) {
      return new Response('Unauthorized', { status: 401 });
    }
    const url = new URL(request.url);
    const headers = { Authorization: `Bearer ${env.SOLVETHREE_API_KEY}`, 'Content-Type': 'application/json' };
    let response;
    if (request.method === 'POST') {
      const requestId = request.headers.get('x-request-id');
      if (!requestId || !/^[A-Za-z0-9_-]{1,64}$/.test(requestId)) return new Response('Provide X-Request-ID', { status: 400 });
      response = await fetch('https://api.solvethree.com/v1/tasks?waitMs=0', {
        method: 'POST', headers, redirect: 'error', signal: AbortSignal.timeout(20000),
        body: JSON.stringify({ site: env.CAPTCHA_SITE, action: 'login', proxy: env.SOLVETHREE_PROXY, requestId }),
      });
    } else if (request.method === 'GET') {
      const id = url.searchParams.get('id');
      if (!id || !/^[A-Za-z0-9_-]{1,128}$/.test(id)) return new Response('Provide a valid id', { status: 400 });
      response = await fetch(`https://api.solvethree.com/v1/tasks/${encodeURIComponent(id)}?waitMs=15000`, {
        headers, redirect: 'error', signal: AbortSignal.timeout(25000),
      });
    } else return new Response('Use POST or GET', { status: 405 });
    if (!response.ok) return Response.json({ error: 'Solver API request failed', status: response.status }, { status: response.status });
    return Response.json(await response.json(), { headers: { 'Cache-Control': 'no-store' } });
  },
};
// Store keys in Worker secret bindings. The task proxy field does not add a
// generic HTTP proxy option to Workers fetch; another client must submit through it.
  1. 1.

    Görev oluşturun

    Worker'a x-integration-key ve x-request-id ile POST gönderin. 1–64 ASCII harf, rakam, alt çizgi veya kısa çizgi içeren bir istek kimliği seçin. Worker, görev gövdesini yapılandırılmış hedef ve proxy'den oluşturur; çağıranın sağladığı gövdeyi kullanmaz.

  2. 2.

    Görev kimliğini saklayın

    Worker, çözücünün JSON yanıtını döndürür. Döndürülen görev kimliğini kaydedin ve görevi oluşturmak için kullanılan istek kimliğini saklayın.

  3. 3.

    Sonucu getirin

    Worker'a, id sorgu parametresinde görev kimliği ve aynı entegrasyon anahtarı üst bilgisiyle GET gönderin. İşleyici, kimliğin sözdizimini doğrular ve ilgili görevi solvethree'den getirir.

Yukarı akışa yapılan her iki istek de çalışma alanı anahtarıyla kimlik doğrular. İşleyici, başarılı olmayan HTTP durum kodlarını genel bir hata gövdesiyle iletir ve başarılı JSON yanıtlarını Cache-Control: no-store olarak işaretler. Paylaşılan entegrasyon anahtarının ötesinde görev sahipliğini denetlemez; getirme işlemini farklı kullanıcılara açmadan önce bu yetkilendirmeyi ekleyin.

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

Oluşturma işlemi, 20 saniyelik fetch zaman aşımıyla waitMs=0 kullanır. Getirme işlemi, 25 saniyelik fetch zaman aşımıyla waitMs=15000 kullanır. Bu sınırlar görevin tüm ömrünü değil, tek tek HTTP çağrılarını sınırlar.

Görev kimliği almadan önce oluşturma işlemi zaman aşımına uğrarsa aynı görev isteğini aynı istek kimliğiyle tekrarlayın. Görev oluşturulduysa bu işlem mevcut görevi kurtarır. Sırf bağlantı başarısız oldu diye yeni bir kimlik üretmeyin: ilk istek solvethree'ye çoktan ulaşmış olabilir. Bir kimliği değiştirilmiş girdilerle yeniden kullanmak çakışmaya neden olur.

Örnek, zaman aşımları da dahil olmak üzere fetch istisnalarını yakalamaz. Çağıranınızın yapılandırılmış bir hata yanıtına ihtiyacı varsa istisna işleme ekleyin, ancak kurtarma için istek kimliğini erişilebilir tutun.

  • pending veya solving: çağıranınızdaki genel süre sınırına uyarak aynı görevi yeniden getirin.
  • ready: çözüm kullanılabilir; sorgulamayı durdurun ve çözümü gönderim istemcisine aktarın.
  • failed: sorgulamayı durdurun ve errorCode ile error alanlarını inceleyin. Başka bir görev oluşturmadan önce bildirilen sorunu giderin.

HTTP hatası ile durumu failed olan bir görev, farklı hata türleridir. İşleyici önce HTTP durumunu denetler; çağıran, başarılı bir yanıttaki görev durumunu yine de incelemelidir. Tanılama için CAPTCHA API hataları belgesine bakın.

Proxy kullanabilen bir istemci üzerinden gönderin

Worker örneği yalnızca solvethree'yi çağırır. Görevin proxy alanı, çözücüye hangi proxy'yi kullanacağını bildirir; Worker'ın ağ yönlendirmesini değiştirmez. Workers fetch, genel amaçlı bir proxy URL seçeneği sunmaz.

Hazır çözümü, amaçlanan hedefe aynı proxy üzerinden gönderim yapabilen bir istemciye aktarın. İlgisiz tarayıcı üst bilgileri yerine çözümde döndürülen userAgent ve secChUa değerlerini kullanın. Hazır bir görev, solvethree'nin çözüm ürettiği anlamına gelir; kabul edilmesi, hedefe yapılan sonraki isteğe bağlıdır.

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

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

Çalışma alanı oluşturun
Cloudflare Workers'tan CAPTCHA API'sini çağırın · solvethree