C# ile Capy Puzzle Nasıl Çözülür ve Üç Alan Birden Nasıl Gönderilir

C# ile Capy Puzzle çözmek için sitenin PUZZLE_ anahtarını sayfadan okuyun, CapyAsync metodunu bu anahtar ve sayfa URL’siyle çağırın, ardından döndürdüğü üç değeri capy_captchakey, capy_challengekey ve capy_answer form alanlarında birlikte ve hemen gönderin. Entegrasyonun tamamı bu kadar; insanları tökezleten kısım ise cevabın biçimidir. Daha önce çözmüş olabileceğiniz türlerin çoğu tek bir token döndürür. Capy ise yalnızca bir arada işe yarayan üç değer döndürür ve bunlardan birinin süresi çabuk dolar. CapSkip, Capy Puzzle desteğini 1.4.0 sürümünde ekledi. Bu rehber anahtarı, çağrıyı, bilerek konmuş iki saniyelik bekletmeyi ve gönderimi ele alıyor.
Neye ihtiyacınız var
- Bir Windows makinesinde çalışan CapSkip 1.4.0 veya üzeri. Capy desteği, CaptchaFox ve Friendly Captcha ile birlikte bu sürümle geldi.
- CapSkip .NET paketinin 1.3.0 veya üzeri bir sürümü; CapyAsync metodunu ekleyen sürüm budur. Paket .NET Standard 2.0’ı hedefler ve System.Text.Json 8’e bağımlıdır, bu yüzden .NET Framework 4.6.2 ve üzerinde, ayrıca .NET 6 ve sonrasında desteklenir. Örnekler, bir .NET 6 konsol projesinin üst düzey deyimlerini (top-level statements) ve örtük using’lerini (implicit usings) kullanır, bu yüzden onları .NET 6 veya sonrasında çalıştırın.
- Hedef sayfadan iki değer: PUZZLE_ ile başlayan Capy anahtarı ve widget’ın çalıştığı sayfanın URL’si. Anahtarın nerede bulunduğunu 1. adım gösteriyor; aynı yer, üçüncü ve isteğe bağlı bir değere ihtiyacınız olup olmadığını da söylüyor.
- Çözücü için bir adres. Local modu 127.0.0.1 üzerinden yalnızca o cihaza yanıt verir; Server modu ise ağ adresinizi veya genel IP’nizi dinler, böylece başka bir makine onu API üzerinden çağırabilir. İkisi de bağlantı ayarları bölümünde yer alır; ne zaman geçiş yapmanız gerektiğini aşağıda ayrı bir başlık anlatıyor.
# dotnet add package CapSkip dotnet add package CapSkip
1. Adım: PUZZLE_ anahtarını ve Capy host’unu bulun
C# ile Capy Puzzle çözmek için gereken her şey hedef sayfadan gelir. Anahtar herkese açıktır, her ziyaretçi için aynıdır ve iki yerde bulunur. Widget script’inin URL’sindeki k parametresi, sunucunun gönderdiği HTML’in içindedir; sayfa kaynağı da HttpClient da bu HTML’i görür. Widget bir tarayıcıda çalıştıktan sonra anahtar, widget’ın forma yazdığı gizli bir capy_captchakey input alanında da durur; DevTools içindeki Elements paneli onu orada gösterir.
<!-- In the HTML the server sends: the k parameter of the widget script --> <script src="https://jp.api.capy.me/puzzle/get_js/?k=PUZZLE_YOUR_KEY"></script> <!-- Written into the form by the widget once it has run (DevTools only) --> <input type="hidden" name="capy_captchakey" value="PUZZLE_YOUR_KEY" />
Anahtarı ön eki dahil birebir kopyalayın. O script etiketine bakarken host’unu da not edin. Script URL’sinde /puzzle/get_js/ öncesindeki her şey, anahtarın arkasında durduğu Capy API’sidir ve CapSkip buna api_server der. Varsayılan değeri https://jp.api.capy.me adresidir ve canlı servis orada çalışır; dolayısıyla bu değeri yalnızca bir sayfa widget’ı başka bir yerden yüklediğinde verirsiniz.
Buradaki tuzaklardan biri diğer çözücülerin dokümantasyonundan gelir. Bunların birkaçı hâlâ bölgesel ön ek olmadan api.capy.me adresini gösterir ve bu host artık çözümlenmiyor. Onu eski bir örnekten kopyaladıysanız seçeneği silin ve CapSkip’in kendi varsayılanını kullanmasına izin verin.
2. Adım: CapyAsync çağrısı
Metot anahtarı, sayfa URL’sini ve isteğe bağlı bir seçenekler sözlüğünü alır. Varsayılan host üzerindeki bir sayfa için ilk ikisinden fazlasına ihtiyacınız yoktur.
// dotnet add package CapSkip
using CapSkip;
var solver = new CapSkipClient(host: "127.0.0.1", port: 8080);
// The PUZZLE_ key, and the page the widget runs on.
var result = await solver.CapyAsync(
"PUZZLE_YOUR_KEY",
"https://example.com/login");
Console.WriteLine(result.CaptchaKey); // capy_captchakey
Console.WriteLine(result.ChallengeKey); // capy_challengekey
Console.WriteLine(result.Answer); // capy_answerAdlandırılmış üç özelliği okuyun. Code özelliği aynı cevabı ham JSON olarak tutar, bu da loglama için kullanışlıdır; RespKey ise boş döner, çünkü yalnızca diğer servislerle uyumluluk için vardır. Answer, 0xax8ex0xax84x gibi bir şeyle başlayan uzun bir dizedir. Bir koordinat değil, parça hareket ederken widget’ın kaydedeceği sürükleme izidir.
Seçenekler sözlüğü api_server, proxy, proxytype ve useragent değerlerini, ayrıca saniye cinsinden çağrı başına bir zaman aşımını alır. Bir user agent ayarlarsanız, CapSkip’in bulmacayı çekmek için yaptığı tek istekte gönderilir; buna nadiren ihtiyaç duyarsınız. Bir de version seçeneği vardır, ancak yalnızca puzzle kabul edilir: Capy’nin diğer ailesi olan avatar, farklı bir endpoint’in arkasında duran başka bir challenge türüdür; bu yüzden SDK, sitenin reddedeceği bir cevap döndürmek yerine onu bir ValidationException ile geri çevirir. Bilinmeyen bir seçenek adı, boş bir PUZZLE_ anahtarı, boş bir sayfa URL’si ya da desteklenmeyen bir proxytype, daha hiçbir şey gönderilmeden aynı istisnayı fırlatır. Değeri null olan bir seçenek basitçe atlanır; bu da isteğe bağlı bir host’u bir if deyimi olmadan geçirebilmenizi sağlar.
// The script tag's host. jp.api.capy.me is the default, so pass
// this only when the page loads the widget from somewhere else.
var result = await solver.CapyAsync(
"PUZZLE_YOUR_KEY",
"https://example.com/login",
new Dictionary<string, object?>
{
["api_server"] = "https://jp.api.capy.me/",
});Bir Capy çözümü neden yaklaşık iki saniye sürer
Tespitin kendisi hızlıdır. CapSkip bulmaca görselini çeker, biraz piksel hesabıyla boşluğu bulur ve sürükleme izini oluşturur; bunların hepsini bir tarayıcı ya da model olmadan yapar. Sonra bilerek bekler.
Capy, bir bulmacanın çekilmesiyle cevabın alınması arasındaki süreyi ölçer ve bir insanın parçayı sürükleyebileceğinden daha hızlı gelen her şeyi reddeder. CapSkip’in Capy üzerindeki kendi ölçümleri alt sınırı yaklaşık bir saniyeye koyuyor: yarım saniyede gelen bir cevap reddedildi, bir saniyeden dört saniyeye kadar (test edilen en uzun süre) gelen cevaplar ise kabul edildi. Ret, yanlış cevapla aynı mesajı kullanır; dolayısıyla fazla hızlı teslim edilen doğru bir çözüm tıpatıp bozuk bir çözücü gibi görünür. Bu yüzden CapSkip her Capy sonucunu, bulmacayı çektikten iki saniye sonrasına kadar bekletir. Bekleme bir sleep çağrısıdır, yani gecikme ekler ama CPU harcamaz; CapyAsync yoklamayı sizin yerinize yaptığı için de gördüğünüz tek şey birkaç saniye süren bir çağrıdır.
Neden iki değil de birkaç saniye: SDK’nın yoklamaları çeyrek saniye arayla başlar, sonra aralığı her seferinde ikiye katlayarak pollingInterval değerine, yani varsayılan olarak 5 saniyeye kadar açılır. Varsayılan ayarlarla cevap genellikle dördüncü saniye civarında alınır. Bir istemcinin çözdüğü şeylerin çoğu Capy ise istemciyi pollingInterval: 0.5 ile oluşturun; çağrı iki saniyeye çok daha yakın döner.
Bunun iki pratik sonucu var. Göndermeden önce kendi gecikmenizi eklemeyin, çünkü bekletme bunu zaten karşıladı. Bu süreyi kısaltmaya da çalışmayın, çünkü cevabın kabul edilmesini sağlayan tam olarak bu bekletmedir.
3. Adım: üç değerin hepsini tek bir istekte gönderin
Üç değer, widget’ın forma kendisinin yazacağı alanlara girer. Onları birlikte, formun geri kalanıyla aynı istekte gönderin.
// http is your HttpClient; result comes from Step 2.
var form = new FormUrlEncodedContent(new Dictionary<string, string>
{
["username"] = "someone",
["capy_captchakey"] = result.CaptchaKey!,
["capy_challengekey"] = result.ChallengeKey!,
["capy_answer"] = result.Answer!,
});
var response = await http.PostAsync("https://example.com/login", form);Cevabı tam olarak döndüğü gibi gönderin. Bu değer sürükleme izidir ve sitenin backend’i onu çekilen bulmacaya göre kontrol eder; dolayısıyla kırpmak, parçalarından yeniden kurmak ya da herhangi bir şekilde düzeltmek onu geçersiz kılar. Form gövdesi için yüzde kodlaması (percent-encoding) yapmak sorun değildir, çünkü bu bir taşıma işlemidir ve sunucu önce onu çözer.
Ardından hemen gönderin. CapSkip her çözüm için yeni bir challenge anahtarı üretir ve bulmaca bu anahtara bağlıdır; dolayısıyla anahtar tek kullanımlıktır ve ömrü kısadır. Bir çözüm bir gönderimi karşılar. Form yarıda bırakılıp sonra sürdürülürse sakladığınız değerlere uzanmak yerine yeniden çözün.
Gerçek formun gönderdiğini birebir taklit edin. Çoğu sayfa, anti-forgery token’ı gibi kendine ait gizli alanlar da taşır; bazıları ise form gönderimi yerine script üzerinden bir JSON gövdesiyle gönderir. Birçoğu User-Agent başlığı olmayan bir isteği de reddeder ve siz eklemedikçe HttpClient bu başlığı göndermez. DevTools açıkken formu bir kez elle gönderip isteği kopyalayın, sonra üç Capy değerini sayfanın koyduğu yere koyun.
4. Adım: başarısızlıklar, yeniden denemeler ve çok sayıda çözümü aynı anda çalıştırmak
C# ile kayda değer bir hacimde Capy Puzzle çözdüğünüzde bazı çözümler başarısız olur. Başarısız bir Capy çözümü bir ApiException olarak gelir ve SDK üzerinden bakıldığında, önemli olan iki durumda da çözülemez olarak görünür. Bu iki durum birbirinin tersi tepkiler ister ve onları birbirinden ayıran şey ne sıklıkta yaşandıklarıdır. İkisi de iki saniyelik bekletmeden önce, erkenden başarısız olur, çünkü CapSkip yalnızca çözülmüş bir cevabı bekletir.
| Ne oldu | Nasıl görünür | Ne yapmalı |
|---|---|---|
| Boşluk bulunamadı | Ara sıra olur ve bir sonraki deneme genellikle başarılı olur | Yeniden deneyin. Her deneme farklı bir fotoğraf üzerinde yepyeni bir bulmaca çeker, dolayısıyla yeniden deneme gerçekten bağımsız bir denemedir |
| Capy API’si anahtarı reddetti | O tek anahtar için her denemede olur ve CapSkip’teki Capy görev listesi Invalid captcha key gösterir | Anahtarı ve api_server değerini kontrol edin. CapSkip reddedilen bir anahtarı yeniden denemez, çünkü aynı şekilde yine reddedilirdi |
Iskalar nadirdir, dolayısıyla tek bir yeniden deneme neredeyse her şeyi karşılar. Tam örnekte olduğu gibi kendi kodunuzda yeniden deneyebilir ya da CapSkip ayarlarının Capy bölümündeki Retries değerini ayarlayabilirsiniz; bu değer varsayılan olarak 0’dır ve görev başına en fazla üç yeniden denemeye izin verir.
CapyAsync, 120 saniye olan defaultTimeout ile yoklama yapar, çünkü bir Capy çözümü bir tarayıcı oturumu değil, tek bir çekme işlemi ve biraz aritmetiktir. Bu süre normal bir çözümü kat kat karşılar. Retries değerini yükseltirseniz ya da CapSkip’in aynı anda çalıştırdığından çok daha fazla çözümü kuyruğa koyarsanız bu değeri constructor’da yükseltin. Capy bölümündeki Max. Threads ayarının varsayılanı 10’dur ve yükseltilebilir; fazladan görevler boş bir thread bekler.
Çok sayıda çözümü paralel çalıştırdığınızda her çözümü kendi gönderimiyle eşli tutun. Yüz CapyAsync çağrısını Task.WhenAll ile başlatıp sonuçları sonradan göndermek, son çözümler biterken ilk challenge anahtarlarının eskimesine yol açar. Çözümü ve gönderimi tek bir görevde birlikte sarın ve aynı anda çalışan görev sayısını, thread sayısına göre boyutlandırılmış bir SemaphoreSlim ile sınırlayın. Hacim arttığında proxy de ekleyin. Her çözüm Capy API’sinden yeni bir bulmaca çeker ve tek bir adresten gelen sürekli bir bulmaca akışı, hız sınırlamanın yakalamak için var olduğu kalıbın ta kendisidir. CapSkip’te bir proxy havuzu yapılandırın ya da istek başına bir proxy geçirin. Proxy yalnızca bulmacanın çekilmesini etkiler; bu da bir Capy çözümünün yaptığı tek istektir.
Çözücüyü başka bir yerde çalıştırmak
Örnekler 127.0.0.1 kullanıyor, çünkü kodunuz ile CapSkip aynı makinedeyken doğru adres budur. .NET uygulaması başka herhangi bir yerde, örneğin bir konteynerde, bir derleme ajanında, bir VPS’te veya bir uygulama servisinde çalışmaya başladığında loopback yanlış makineyi gösterir ve ilk çözüm bir NetworkException fırlatır. CapSkip’i Server moduna alın; o zaman ağ adresinizi veya genel IP’nizi dinler, böylece bunların hepsi ona API üzerinden ulaşabilir. Rota internetten geçiyorsa statik bir genel IP kullanın, API anahtarı doğrulamasını açın ve bir Windows Firewall kuralıyla portu yalnızca beklediğiniz adreslerle sınırlayın. Bu hâlâ sizin kendi Windows makinenizdir ve çözüm başına ücretlendirme hâlâ yoktur.
İstemci ortam değişkenlerini kendiliğinden okumaz. Tam örnekte olduğu gibi CAPSKIP_HOST ve CAPSKIP_API_KEY değerlerini kendi kodunuzda okuyup constructor’a verin; böylece aynı derleme hem masanızda hem de bir sunucuda çalışır.
Tam çalışan örnek
// dotnet add package CapSkip
using System.Text.RegularExpressions;
using CapSkip;
var pageUrl = "https://example.com/login";
var http = new HttpClient();
var solver = new CapSkipClient(
apiKey: Environment.GetEnvironmentVariable("CAPSKIP_API_KEY") ?? "capskip",
host: Environment.GetEnvironmentVariable("CAPSKIP_HOST") ?? "127.0.0.1",
port: 8080,
// Capy answers after a two second hold; poll often enough to catch it.
pollingInterval: 0.5);
// The widget script's k parameter. The capy_captchakey input only
// exists once the widget has run in a browser.
var html = await http.GetStringAsync(pageUrl);
var key = Regex.Match(html, "PUZZLE_[A-Za-z0-9_-]+").Value;
if (key.Length == 0)
throw new InvalidOperationException("No PUZZLE_ key in the HTML; check DevTools.");
// The script URL up to /puzzle/get_js/, when there is one; a null value is dropped.
var host = Regex.Match(html, @"(https://[^""'\s<>]+?)/puzzle/get_js/").Groups[1].Value;
var options = new Dictionary<string, object?>
{
["api_server"] = host.Length > 0 ? host : null,
};
try
{
// A missed hole comes back unsolvable; a retry draws a new puzzle.
SolveResult? result = null;
for (var attempt = 1; result is null; attempt++)
{
try
{
result = await solver.CapyAsync(key, pageUrl, options);
}
catch (ApiException ex) when (attempt < 3 && ex.Message.Contains("UNSOLVABLE"))
{
Console.WriteLine($"attempt {attempt}: {ex.Message}");
}
}
// All three together, straight away: the challenge key is single-use.
var form = new FormUrlEncodedContent(new Dictionary<string, string>
{
["username"] = "someone",
["capy_captchakey"] = result.CaptchaKey!,
["capy_challengekey"] = result.ChallengeKey!,
["capy_answer"] = result.Answer!,
});
// Post wherever the form's action attribute points.
var response = await http.PostAsync(pageUrl, form);
Console.WriteLine((int)response.StatusCode);
}
catch (CapSkip.ValidationException ex)
{
// An empty key or URL, avatar as the version, or an unknown option.
Console.WriteLine($"not sent: {ex.Message}");
}
catch (CapSkip.TimeoutException)
{
Console.WriteLine("gave up waiting; defaultTimeout is 120 seconds");
}
catch (CapSkipError ex)
{
// The third miss, a refused key, or CapSkip unreachable.
Console.WriteLine($"gave up: {ex.Message}");
}Anahtar regex’i PUZZLE_ ön ekini HTML’in herhangi bir yerinde arar, bu yüzden anahtarı etiketi ayrıştırmadan widget script’inin URL’sinden ayıklar. İndirilen HTML’de capy_captchakey input alanı hiç yoktur, çünkü widget onu yalnızca bir tarayıcıda çalıştığında yazar. Host regex’i bir https script URL’sinde /puzzle/get_js/ öncesindeki her şeyi yol kısmı dahil tutar; hiçbir şey bulamadığında null değer atlanır ve CapSkip kendi varsayılanını kullanır. Üç denemenin üçü de başarısız olursa her şeyden önce anahtara bakın, çünkü reddedilen bir anahtar her seferinde aynı şekilde başarısız olur, bir ıska ise neredeyse hiçbir zaman üç kez üst üste yaşanmaz. Sayfa widget’ı paketlenmiş bir script’ten oluşturuyorsa ve iki regex de eşleşmiyorsa Network sekmesini açın ve iki değeri de widget’ın kendi isteğinden kopyalayın. Bu metodun arkasındaki ham endpoint şurada belgelenmiştir: API referansı. Paketin çözdüğü diğer tüm CAPTCHA türleri ise şurada: C# CAPTCHA çözücü sayfası.
Sık görülen hatalar ve anlamları
| Gördüğünüz | Neden | Düzeltme |
|---|---|---|
| CapSkip üç değerin hepsini döndürdüğü hâlde site gönderimi reddediyor | Cevap değiştirildi ya da değerlerden yalnızca biri veya ikisi forma ulaştı | result.Answer değerini diğer iki değerle birlikte, birebir ve tek istekte gönderin |
| Bir kez çalışan gönderim ikinci denemede başarısız oluyor | Challenge anahtarı tek kullanımlıktır ve ömrü kısadır | Her gönderim için yeniden çözün ve hemen gönderin |
| Tek bir anahtar için her denemede bir ApiException | Capy API’si anahtarı reddetti ya da api_server yanlış host’u gösteriyor | Anahtarı ön eki dahil yeniden kopyalayın ve script etiketinin host’unu kontrol edin |
| Ara sıra gelen, CAPTCHA’nın çözülemez olduğunu söyleyen bir ApiException | CapSkip o bulmacadaki boşluğu bulamadı | Yeniden deneyin; bir sonraki deneme farklı bir bulmaca çeker |
| Başka bir servisten örnek kopyaladıktan sonra her çözüm başarısız oluyor | Örnek, api_server değerini artık çözümlenmeyen api.capy.me olarak ayarlıyor | Seçeneği kaldırın ve varsayılan host’u kullanın |
| Daha hiçbir şey gönderilmeden gelen bir ValidationException | Boş bir anahtar veya sayfa URL’si, version olarak avatar ya da metodun kabul etmediği bir seçenek | Regex’in anahtarı bulduğunu kontrol edin ve mesajda adı geçen seçeneği çıkarın |
| Uzun bir çalışma ilerledikçe artan başarısızlıklar | Her bulmaca tek bir adresten çekiliyor | Çözümleri CapSkip’te yapılandırılmış bir proxy havuzuna dağıtın |
| Yoğun paralel yük altında bir TimeoutException | Kuyrukta, Max. Threads ayarının 120 saniye içinde bitirebileceğinden fazla görev var | Eşzamanlılığı bir SemaphoreSlim ile sınırlayın ya da defaultTimeout değerini yükseltin |
| İlk çözümde bir NetworkException | CapSkip çalışmıyor ya da host ve port yanlış | CapSkip’i başlatın, ardından Local modunda mı yoksa Server modunda mı olması gerektiğini kontrol edin |
| Derleme, belirsiz bir TimeoutException yüzünden başarısız oluyor | O kısa adı hem CapSkip hem System tanımlıyor | CapSkip.TimeoutException’ı tam olarak yazın veya CapSkipError’ı yakalayın |
FAQ
Bir Capy çözümü neden token yerine üç değer döndürür?
Çünkü Capy formunun gönderdiği şey budur. Hiçbir aşamada bir sunucu tarafından verilen bir token yoktur. Widget’ın kendisi bir challenge anahtarı üretir, ona ait bulmacayı çeker ve sürüklemeyi kaydeder; ardından site, challenge anahtarını ve cevabı kontrol ettirmek için kendi özel anahtarıyla birlikte Capy’ye gönderir. CapSkip widget’ın rolünü üstlenir, dolayısıyla widget’ın forma yazacağı şeyi döndürür.
Barındırılan bir platformdaki .NET uygulaması çözücüye erişebilir mi?
Evet. Bağlantı ayarlarından CapSkip’i Server moduna alın; böylece loopback yerine bir ağ adresini dinler. O adresi kodunuzda CAPSKIP_HOST değişkeninden okuyun ve istemciye verin. Bir konteyner sunucusu, bir VPS, bir CI ajanı ve yönetilen bir uygulama servisi; hepsi aynı şekilde, aynı HTTP API üzerinden bağlanır. Rota internetten geçiyorsa statik bir genel IP ve bir güvenlik duvarı kuralı kullanın. Çözücü sizin sahip olduğunuz donanımda kalır, dolayısıyla lisans veya çözüm sayısı açısından hiçbir şey değişmez.
Bunun C# ile GeeTest v3 çözmekten farkı nedir?
İkisi de birlikte gönderilen birkaç değer döndüren kaydırmalı bulmacalardır, ancak farklı noktalardan başlarlar. GeeTest v3, sitenin verdiği bir challenge ile başlar; bu challenge yaklaşık bir dakika içinde sona erdiği için onu çözmeden hemen önce çekmeniz gerekir. Capy ise anahtardan başka hiçbir şeyle başlamaz, çünkü challenge anahtarı çözüm anında üretilir; dolayısıyla önceden çekilecek bir şey yoktur ve önemli olan tek saat çözümden sonra işlemeye başlar. GeeTest tarafı şurada ele alınıyor: C# GeeTest v3 rehberi.
CaptchaFox’ta olduğu gibi gönderimle birlikte bir user agent göndermem gerekir mi?
Hayır. Bir CaptchaFox token’ı onu üreten tarayıcıya bağlıdır, dolayısıyla gönderimin o tarayıcının user agent’ını taşıması gerekir; bunu C# CaptchaFox rehberi açıklıyor. Capy cevabı ise hiçbir tarayıcıya bağlı değildir. CapSkip onun için bir user agent döndürmez; geçirebileceğiniz isteğe bağlı user agent da yalnızca bulmacayı çeken isteği değiştirir.
Kısa özet
C# ile Capy Puzzle çözmek için PUZZLE_ anahtarını widget script’inin URL’sinden ya da capy_captchakey input alanından kopyalayın ve varsayılan olmayabileceği için script’in host’unu not edin. CapyAsync metodunu anahtar ve gerçek sayfa URL’siyle çağırın ve birkaç saniyesini almasına izin verin. CaptchaKey, ChallengeKey ve Answer değerlerini capy_captchakey, capy_challengekey ve capy_answer alanlarında birebir, birlikte ve hemen gönderin; her gönderim için yeniden çözün. Ara sıra yaşanan ıskalarda yeniden deneyin, hacim büyüdükçe proxy ekleyin ve çağıran kod çözücünün makinesinden ayrıldığında Server moduna geçin.
- Bu türün nasıl çalıştığı ve çözücünün neleri kapsadığı: Capy Puzzle çözücü sayfası.
- CapSkip .NET paketinin çözdüğü diğer tüm CAPTCHA türleri: C# ve .NET çözücü sayfası.
O yeniden denemeyle ilgili son bir nokta. Her deneme farklı bir bulmaca çektiği için bir ıskanın doğru çaresi yeniden denemektir ve kendi makinenizde bir yerel captcha çözücü çalıştırdığınızda ikinci bir deneme, faturalanan yeni bir çözüme değil, yalnızca birkaç saniyeye mal olur.
