Activepieces'te CAPTCHA Nasıl Çözülür (HTTP Piece)

activepieces captcha - How to Solve CAPTCHAs in Activepieces (HTTP Piece)

Activepieces'te bir captcha çözümü üç adımdır: doğrulamayı gönderin, bekleyin, token'ı okuyun. Bunu bir Code step yerine HTTP piece üzerine kurun, çünkü bir Code step'in npm'i kullanıp kullanamayacağı kurulumunuzun hangi sandbox modunda çalıştığına bağlıdır ve Activepieces Cloud'un kullandığı modda npm yoktur. HTTP piece her modda çalışır. Koddan daha önemli olan ikinci bir ayar daha vardır ve akışınızın özel bir adresteki bir çözücüye hiç ulaşıp ulaşamayacağına o karar verir.

Neye ihtiyacınız var

  • Bulutlarında veya kendi sunucunuzda barındırılan, içinde bir akış yayımlayabileceğiniz bir Activepieces projesi.
  • Bir Windows makinesinde çalışan CapSkip. Local modu yalnızca Activepieces aynı makinede çalışıyorsa uygundur; bu da pratikte kendi sunucunuzda barındırılan bir kurulum demektir. Diğer her şey Server modu gerektirir.
  • Otomatikleştirdiğiniz sitenin sitekey'i ve sayfa URL'si.
  • Çözücü anahtarını tutan bir proje değişkeni; böylece anahtar akış gövdesinin içinde durmaz.
  • Ağı sıkılaştırılmış, kendi sunucunuzda barındırılan bir kurulumda, SSRF izin listesinde bir kayıt. Adım 3 bunu ele alır.

Neden Code step değil de HTTP piece

Code step düzenleyicisinde bir Add npm package iletişim kutusu vardır. Paketi npm kayıt defterinde arar, en son sürümü sabitler ve Code step’in bağımlılık listesine yazar. Activepieces Cloud'da bu liste sonra çöpe atılır.

Activepieces bir Code step'i, kaynağınızı bir TypeScript dosyasına yazarak, bağımlılıklarını kurarak ve sonucu paketleyerek derler. Derleme, bağımlılıklarınızı yalnızca kurulumun çalıştırma modu paketlere izin veriyorsa ister. Activepieces’in kendi bulutunun çalıştırdığı mod olarak belgelediği V8 sandboxing modunda paketlere izin verilmez; bu yüzden derleme yerine boş bir bağımlılık kümesi koyar ve yine de derler. Adım sorunsuz dağıtılır. İçe aktarma ise akış çalıştığında başarısız olur.

Çalıştırma moduCode step'te npmBu akış için anlamı
V8 sandboxing, yani SANDBOX_CODE_ONLY değerinpm paketleri yokHTTP piece'i kullanın. Activepieces Cloud bu moddadır
Birleşik sandboxing, SANDBOX_CODE_AND_PROCESSnpm paketleri yokHTTP piece'i kullanın
Çekirdek ad alanları, SANDBOX_PROCESSnpm paketleri çalışırNode SDK çalışır ve yoklamayı sizin için yapar
Sandboxing yok, UNSANDBOXEDnpm paketleri çalışırNode SDK çalışır ve yoklamayı sizin için yapar

Yani bunu yapmanın iki dürüst yolu vardır ve hangisine sahip olacağınız sizin değil, yöneticinizin seçimidir. Aşağıdaki HTTP piece yolu dördünde de çalışır. Bu kılavuzun sonundaki Code step’i kullanan yol bunlardan ikisinde çalışır ve elinizde olduğunda çok daha kısadır.

Adım 1: doğrulamayı gönderin

CapSkip, 8080 numaralı bağlantı noktasında 2captcha uyumlu API'yi konuşur; bu yüzden HTTP piece, kurulacak bir konnektör olmadan onunla iletişim kurar. Bir Send HTTP Request eylemi ekleyin, yöntemi POST, URL'yi de çözücünüzdeki gönderim uç noktası olarak ayarlayın.

{
  "key": "{{variables['CAPSKIP_KEY']}}",
  "method": "userrecaptcha",
  "googlekey": "YOUR_SITEKEY",
  "pageurl": "https://example.com/page-with-recaptcha",
  "json": 1
}

Yanıt, request alanı yoklama yapacağınız id'yi tutan küçük bir JSON nesnesidir.

{ "status": 1, "request": "2122988149" }

Bu, reCAPTCHA v2'dir. CapSkip'in desteklediği diğer türler, farklı parametrelerle yapılan aynı çağrıdır: invisible veya enterprise değerini 1 yapın, ya da version değerini bir action adıyla birlikte v3 yapın, ya da method değerini turnstile veya geetest olarak değiştirin. Parametrelerin tam listesi şurada: CapSkip API dokümantasyonu.

Anahtarı yapıştırmak yerine proje değişkeni söz dizimiyle referans verin. Değişkenler beklemede şifrelenir ve değişkenler listesinde size geri gösterilmez; birini döndürmek de her akışı tek tek taramak yerine tek bir düzenlemeden ibarettir.

Adım 2: bekleyin, ardından token'ı okuyun

Bir Delay For eylemi, ardından sonucu okuyan ikinci bir HTTP isteği ekleyin. Bir reCAPTCHA v2 onay kutusu için yirmi saniye makul bir ilk beklemedir. Görüntü CAPTCHA'ları yaklaşık bir saniyede, v3 on ila on beş saniyede, GeeTest ise yaklaşık beş saniyede geri döner.

# GET, with the id from step 1 in the query string.
http://127.0.0.1:8080/res.php?key=YOUR_KEY&action=get&id=2122988149&json=1

İki yanıt mümkündür. Hazır bir sonuç, gönderim yanıtıyla aynı biçimde, token'ı request alanında tutan bir JSON nesnesidir. Henüz hazır olmayan bir sonuç ise T harfi olmadan yazılan CAPCHA_NOT_READY dizesidir ve bir şeylerin ters gittiği değil, beklemeye devam edin anlamına gelir. Bu yazımın hikâyesi şurada: CAPCHA_NOT_READY yanıtının tam yazısı.

Delay piece, on saniyenin iki yanında farklı davranır ve yoklama biçimini burada ucuz kılan ayrıntı da budur. On saniye veya daha kısa bir gecikme, worker sürecinin içinde uyur. Daha uzun olan her şey bir bekleme noktası oluşturur, çalıştırmayı askıya alır ve süre dolduğunda kaldığı yerden devam ettirir. Askıda geçen süre çalıştırma süresi değildir ve Activepieces, Delay ya da Wait for Approval ile duraklatılan akışların çalıştırma zaman aşımına sayılmadığını belgeler. Dolayısıyla yirmi saniyelik bir bekleme, on dakikalık bütçenizden hiçbir şey götürmez; ikinci bir bekleme de götürmez.

Tek bir okuma yetmiyorsa, bir döngüye başvurmak yerine bir Delay ve bir okuma daha ekleyin. Bunun iki nedeni var. Loop on Items listedeki her öğeyi çalıştırır; yani token gelmiş olsa da olmasa da yinelemeler gerçekleşir ve içine koyduğunuz bir Router, döngü turunu değil yalnızca daldaki işi size kazandırır. Daha da önemlisi, bir CapSkip sonucu yalnızca bir kez okunabilir; dolayısıyla zaten toplamış olduğu bir id'yi yeniden okuyan bir döngü token'ı iki kez almaz, ikinci okumada bir hata alır.

Adım 3: yerel bir çözücüyü engelleyen ağ ayarı

İnsanları yakalayan kısım budur ve bu, genel orkestratör tavsiyesi değil, Activepieces'e özgü bir konudur. Activepieces'in akış kodu için, AP_NETWORK_MODE adlı bir değişkenle denetlenen bir SSRF koruması vardır. Varsayılan değeri UNRESTRICTED'dır. STRICT olarak ayarlandığında motor, herhangi bir akış kodu çalışmadan önce Node’un DNS aramasını ve soket bağlantısını yamalar ve adresi loopback, RFC1918 özel, link-local veya bulut meta verisi olan her bağlantıyı reddeder. SSRFBlockedError adlı bir hata fırlatır.

Kendi ağınızdaki bir CAPTCHA çözücü, tam da o korumanın engellediği biçimdedir. Hem 127.0.0.1 hem de 192.168.1.40 gibi bir LAN adresi bu listededir. Bu, korumanın işini yapması demektir, bir hata değil; ve Activepieces bunun için belgelenmiş istisnayı size sunar: çözücünün adresini AP_SSRF_ALLOW_LIST’e koyun. Bu ayar virgülle ayrılmış IP'ler ve CIDR aralıkları alır ve hem akış koduna hem de sunucunun kendi giden isteklerine aynı şekilde uygulanır. Değiştirdikten sonra sunucuyu yeniden başlatın.

# On a self-hosted Activepieces with AP_NETWORK_MODE=STRICT,
# name the solver machine or its subnet so flows can reach it.
AP_SSRF_ALLOW_LIST=192.168.1.40,10.0.5.0/24

Korumadan ayrı olarak, akışın makineye zaten ulaşabiliyor olması gerekir. CapSkip'in bunun için iki bağlantı modu vardır. Local modu 127.0.0.1'e bağlanır ve yalnızca o cihaza hizmet eder. Server modu ağ adresinize veya genel IP'nize bağlanır; böylece başka bir makine, bir konteyner ana bilgisayarı veya barındırılan bir platform aynı Windows makinesine API üzerinden ulaşabilir. Her ikisi de şu bölümün altındadır: bağlantı ayarları. Server modu yalnızca çözücünün hangi adreste dinlediğini değiştirir. Donanım yine sizindir ve çözüm yine sayaçsızdır.

Activepieces'in çalıştığı yerHangi mod ve başka ne gerekir
CapSkip ile aynı Windows makinesinde, kendi sunucunuzda barındırılanLocal modu; host 127.0.0.1 olarak kalır. Ağ modu STRICT ise bu adresi izin listesine ekleyin
Docker'da veya ağınızdaki başka bir makinede, kendi sunucunuzda barındırılanÇözücünün LAN adresiyle Server modu. Bu adresi de AP_SSRF_ALLOW_LIST’e ekleyin
Activepieces CloudStatik bir genel IP ve bir güvenlik duvarı kuralıyla Server modu. SSRF koruması yine çalışır ama engellemez, çünkü genel bir adres onun engelleme listesinde değildir

Adım 4: zaman aşımları ve yeniden denemeler

Yavaş bir çözümün ayakta kalıp kalmayacağına üç sayı karar verir ve bunlardan yalnızca birini akışta siz ayarlarsınız.

Hangi limitDeğerBir çözüm için neden önemli
Çalıştırmanın tamamı ve herhangi bir tek eylem birbirinden bağımsız olarak sınırlanırHer biri on dakika; ikisi de tek bir değişkenle, AP_FLOW_TIMEOUT_SECONDS ile ayarlanırRahat, çünkü gecikme süresi akış çalıştırma zaman aşımına sayılmaz
Senkron webhook yanıt zaman aşımıOtuz saniye, AP_WEBHOOK_TIMEOUT_SECONDS ile ayarlanırTuzak burada. Aşağıdaki paragrafa bakın
Adım başına Retry on FailureDört deneme; beklemeler dört, sekiz ve on altı saniyedirYeniden başlamakta olan bir çözücüyü kapsar, yalnızca yavaş olanı değil

Canınızı yakan sayı webhook sayısıdır. Sonu sync kelimesiyle biten bir webhook URL’si, HTTP bağlantısını açık tutar ve akışın sonucuyla yanıt verir; otuz saniye sonra da pes eder. Bir reCAPTCHA v2 çözümü otuz saniye içinde güvenilir biçimde bitmez; dolayısıyla akışı senkron olarak tetikleyip token bekleyen bir çağıran, akış arkasında çalışmayı sürdürürken HTTP 408 alır. Akışı asenkron tetikleyin ve token'ı ihtiyacınız olan yere göndermesini sağlayın ya da işi bölün, böylece senkron yarısı hiçbir zaman bir çözümü beklemesin.

Retry on Failure'ı gönderim adımı için açmaya değer, okuma adımı için değil. Geri çekilmesi iki saniyelik bir tabandan üsteldir; yani dört deneme boyunca beklemeler kabaca dört, sekiz ve on altı saniyedir. Bu, reddedilmiş bir bağlantı için doğrudur. Zaten toplamış olduğunuz bir token için ise yanlıştır, çünkü yukarıdaki bir kez okuma kuralı geçerlidir.

Kendi sunucunuzda barındırılan bir kurulumda her şey tek adımda

Yöneticiniz sandboxing olmadan ya da çekirdek ad alanı sandboxing'i ile çalıştırıyorsa, yukarıdaki akış tek bir Code step'e indirgenir, çünkü yoklamayı SDK sizin için yapar. npm iletişim kutusunda capskip paketini ekleyin, ardından adımı yazın. Code step'ler TypeScript'tir ve çalışmadan önce paketlenir; bu yüzden sıradan bir import çalışır.

// npm install capskip - add it in the step's package dialog.
import { CapSkip } from 'capskip';

export const code = async (inputs) => {
  // host is the solver machine. Keep 127.0.0.1 only when
  // Activepieces runs on the same Windows box as CapSkip.
  const solver = new CapSkip({
    host: inputs.capskipHost,
    port: 8080,
    apiKey: inputs.capskipKey,
  });

  const result = await solver.recaptcha(inputs.sitekey, inputs.pageUrl);

  // Return the token, not the whole result. The next step
  // submits it, and run logs keep whatever you return.
  return { token: result.code };
};

capskipKey değerini, proje değişkeni referansını tutan bir adım girdisi olarak geçirin; böylece anahtar çalışma zamanında çözümlenir ve kaynakta hiç görünmez. SDK, sabit bir aralıkta uyumak yerine 250 milisaniyede yoklamaya başlar ve geri çekilir; bu yüzden bu sürüm genellikle Delay tabanlı akıştan daha erken döner. reCAPTCHA, Turnstile ve GeeTest için tavanı 300 saniyedir ve bu, on dakikalık eylem zaman aşımının epey içinde kalır.

Token'ı hemen ardından gelen adımda gönderin. Bir reCAPTCHA token'ı yaklaşık iki dakika geçerlidir; bu yüzden çözen, bir onay adımında bekleyen ve sonra gönderen bir akış, üretildiği anda kusursuz geçerli olan bir token yüzünden başarısız olur. Bu hata biçimi şu kılavuzda ele alınır: reCAPTCHA token süresinin dolması.

Sık görülen hatalar ve anlamları

GördüğünüzNedenDüzeltme
Çalıştırma günlüğünde SSRFBlockedErrorAğ modu STRICT ve çözücü özel bir adresteAdresi AP_SSRF_ALLOW_LIST'e ekleyin ve sunucuyu yeniden başlatın
Akış çalıştığında capskip modülü bulunamıyorSandbox modu, derleme sırasında bağımlılığı attıAdımı HTTP piece çağrıları olarak yeniden kurun ya da paketlere izin veren bir modda kendi sunucunuzda barındırın
8080 numaralı bağlantı noktasında bağlantı reddedildiCapSkip loopback'e bağlı ve worker başka bir yerdeCapSkip’i Server moduna geçirin ve çözücünün ağ adresini kullanın
Okuma her seferinde CAPCHA_NOT_READY döndürüyorGecikme, çözümün sürdüğü süreden kısaİlk Delay'i artırın ya da ikinci bir gecikme ve okuma ekleyin
Aynı id'nin ikinci okuması başarısız oluyorBir CapSkip sonucu yalnızca bir kez okunabilirToken'ı bir adım çıktısında saklayın, id'yi asla yeniden okumayın
Yanıtta ERROR_WRONG_USER_KEYProje değişkeni boş bir dizeye çözümlendiDeğişken adını, büyük ve küçük harflerine kadar kontrol edin
Senkron bir webhook'tan HTTP 408Çözüm, otuz saniyelik webhook zaman aşımından uzun sürdüAsenkron tetikleyin ya da çözümü senkron yoldan çıkarın
Geçerli bir token hedef site tarafından reddediliyorÇözüm adımı ile gönderim adımı arasında süresi dolduBir sonraki adımda gönderin, aralarında onay veya gecikme olmadan

FAQ

CapSkip'i Activepieces Cloud'dan kullanabilir miyim?

Evet, Server modu ile. Worker'lar sizin değil Activepieces altyapısındadır; bu yüzden çözücünün onların ulaşabileceği bir adreste dinlemesi gerekir: tercihen statik bir genel IP ve trafiklerini kabul eden bir güvenlik duvarı kuralı. Çözücüyle ilgili hiçbir şey değişmez, yalnızca nerede dinlediği değişir. Kendi bulutlarında yapamayacağınız şey, bir Code step'te Node SDK'yı kullanmaktır, çünkü o modda npm yoktur; bu yüzden akışı HTTP piece üzerine kurun.

npm paketini eklemek neden işe yaramış gibi göründü?

Çünkü iletişim kutusu bir arayüz özelliğidir ve süzme işlemi sunucuda gerçekleşir. İletişim kutusu paketi npm kayıt defterine karşı çözümler ve kaydeder. Derleme sırasında sunucu, çalıştırma modunun paketlere izin verip vermediğini sorar; izin vermiyorsa kurulumdan önce yerine boş bir bağımlılık kümesi koyar. Adım hiçbir uyarı olmadan derlenir ve dağıtılır. Bunu çalışma zamanında, import hiçbir şeye çözümlendiğinde öğrenirsiniz.

Akış, token gelene kadar döngüye girmeli mi?

Genellikle hayır. Loop on Items tüm öğe listesini çalıştırır; yani yapılandırdığınız her yineleme için bedel ödersiniz ve her yineleme, yalnızca bir kez okunabilen bir id'yi yeniden okumaya çalışır. Doğru uzunlukta bir gecikme artı tek bir okuma hem daha ucuz hem de doğrudur; ikinci bir gecikme ve okuma da gayet iyi bir yedektir. Uzun gecikmeler burada alışılmadık biçimde ucuzdur, çünkü on saniyeyi aşan bir gecikme bir worker'ı meşgul etmek yerine çalıştırmayı askıya alır ve askıda geçen süre çalıştırma zaman aşımına sayılmaz.

Bu, n8n, Make.com veya Zapier ile karşılaştırıldığında nasıl?

İstekler dört aracın hepsinde aynıdır. Farklı olan, her birinin bunların önüne koyduğu engeldir.

  • n8n için engel konteyner ağıdır ve n8n iş akışı kılavuzu bunu baştan sona ele alır.
  • Make.com için engel, HTTP modülünün talep ettiği sertifikadır ve bunu Make.com anlatımı eksiksiz olarak ele alır.
  • Zapier için engel, bir Code step'teki çalışma zamanı tavanıdır ve bu, şurada açıklanır: Zapier kılavuzu.

Activepieces kendine ait iki engel daha ekler: npm'in hiç var olup olmadığına karar veren bir sandbox modu ve özel bir adresi doğrudan reddedebilen bir SSRF koruması.

Kısa özet

Çözümü HTTP piece üzerine kurun, çünkü o her sandbox modunda çalışır, Code step yolu ise çalışmaz. Gönderim uç noktasına gönderin, çalıştırma bir worker'ı meşgul etmek yerine askıya alınsın diye on saniyeyi aşan bir gecikme koyun, sonra sonucu bir kez okuyun ve saklayın. Anahtarı bir proje değişkenine koyun. Kurulum kendi sunucunuzdaysa ve ağ modu katıysa, çözücüyü SSRF izin listesine ekleyin; Activepieces, çözücünün kendi makinesi dışında herhangi bir yerde çalışıyorsa CapSkip’i Server moduna geçirin. Senkron bir webhook üzerinde asla bir çözümü beklemeyin.

Bu akışı birkaç dakikada bir zamanlamadan önce tartmaya değer bir şey: CapSkip bir sınırsız captcha çözücü olup zaten sahip olduğunuz donanımda çalışır; dolayısıyla sürekli tetiklenen bir akış ile ara sıra tetiklenen bir akış tam olarak aynı maliyettedir.