C# ile CaptchaFox, Token Reddedilmeden Nasıl Çözülür

C# ile CaptchaFox çözmek için CaptchaFoxAsync metodunu sitekey ve sayfa URL’siyle çağırın, dönen token’ı cf-captcha-response form alanına koyun ve bu isteği, CapSkip’in token ile birlikte döndürdüğü user agent ile gönderin. Entegrasyonların çoğu bu son kısımda başarısız olur. Bir CaptchaFox token’ı onu üreten tarayıcıya bağlıdır ve çözümün kendisi başarılı olsa bile doğru bir token’ın reddedilmesinin en yaygın nedeni uyuşmayan bir user agent’tır. CapSkip, CaptchaFox desteğini 1.4.0 sürümünde ekledi. Bu rehber anahtarı bulmayı, çağrıyı, gönderimi ve token’ın kabul edilip edilmeyeceğini belirleyen birkaç ayarı ele alıyor.
Neye ihtiyacınız var
- Bir Windows makinesinde çalışan CapSkip 1.4.0 veya üzeri. CaptchaFox desteği, Friendly Captcha ve Capy Puzzle ile birlikte bu sürümle geldi.
- CapSkip .NET paketinin 1.3.0 veya üzeri bir sürümü; CaptchaFoxAsync 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: sitekey ve widget’ın çalıştığı sayfanın URL’si. Anahtarın nerede bulunduğunu 1. adım gösteriyor; sayfadaki bir ayrıntı daha da isteğe bağlı bir ayara karar veriyor.
- Çö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: sitekey’i ve widget kaynağını bulun
C# ile CaptchaFox çözmek için gereken her şey hedef sayfadan gelir. Sitekey herkese açıktır, her ziyaretçi için aynıdır ve geleneksel olarak sk_ ile başlar. Siteler onu üç yerden birine koyar ve bunlardan yalnızca birini bulmanız yeterlidir.
- Widget kendini render ediyorsa kapsayıcı öğede: captchafox sınıfına ve bir data-sitekey özniteliğine sahip bir div. Form gönderilene kadar hiçbir şey göstermeyen gizli mod da aynı div’i, data-mode değeri hidden olarak ayarlanmış şekilde kullanır; dolayısıyla anahtar orada da bulunur.
- Sayfa widget’ı kendi script’inden oluşturuyorsa bir captchafox.render çağrısının seçeneklerinde. Bir render çağrısı gizli modu da açabilir; anahtar yine hemen yanında durur.
- Bunların hiçbiri sunulan HTML’de görünmüyorsa Network sekmesinde. api.captchafox.com adresine giden isteği bulun; anahtar, /captcha/ sonrasındaki yol parçasıdır.
Sayfa kaynağı açıkken widget’ı yükleyen script etiketine bakın. Widget sayfalara iki farklı yerden gelir ve bir sitenin hangisini yüklediği, o sitenin geri nasıl bir token beklediğini belirler.
| Widget’ın yüklendiği kaynak | Dönen token | Verilmesi gereken |
|---|---|---|
| https://cdn.captchafox.com/, çoğu sitenin kullandığı standart widget | Düz bir token | Ek bir şey gerekmez; varsayılan budur |
| https://s.uicdn.com/mampkg/ altındaki, bazı platformların gömdüğü bir paket | MAM_ ile başlayan bir token | Script etiketindeki tam paket yolu, api_server seçeneği olarak |
Bunu yanlış yapmak sessiz bir başarısızlığa yol açar. Yanlış kaynağı gönderirseniz çözüm yine başarılı olur ve bir token döndürür, yalnızca sitenin kabul etmeyeceği bir biçimde; dolayısıyla sorun, yakalayabileceğiniz bir hata olarak değil, daha sonra reddedilen bir form olarak ortaya çıkar.
2. Adım: CaptchaFoxAsync çağrısı
Metot sitekey’i, sayfa URL’sini ve isteğe bağlı bir seçenekler sözlüğünü alır. Standart widget 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 sitekey from the widget, and the page the widget runs on.
var result = await solver.CaptchaFoxAsync(
"YOUR_SITEKEY",
"https://example.com/signup");
Console.WriteLine(result.Token); // goes in cf-captcha-response
Console.WriteLine(result.UserAgent); // send this as the User-AgentToken özelliğini okuyun. Code özelliği aynı dizeyi tutar, ancak Token adını içine gittiği alandan alır. UserAgent, token’ı üreten tarayıcının kimliğidir; bu tarayıcı CapSkip’in kendi tarayıcısıdır, sizin gönderdiğiniz herhangi bir şey değildir. Bir çözüm user agent bildirmediğinde SDK bir değer uydurmak yerine onu null bırakır.
Sayfa URL’si burada çoğu türde olduğundan daha önemlidir. CaptchaFox her anahtarı izin verilen alan adlarından oluşan bir listeye kaydeder ve herhangi bir şey vermeden önce host’u kontrol eder; dolayısıyla yanlış sayfayla gönderilen bir anahtar ara sıra değil, kalıcı olarak reddedilir. Yeniden deneme işe yaramayacağı için CapSkip bu durumu yeniden denemek yerine hemen bildirir. Bir arama sonucunu, bir yönlendirmeyi ya da kısaltılmış bir bağlantıyı değil, widget’ın gerçekten çalıştığı sayfayı gönderin.
MAM paketini yükleyen siteler
1. adımda s.uicdn.com altında bir script bulduysanız, paket yolunu sayfanın yazdığı şekliyle birebir kopyalayın ve api_server olarak verin. Token bu durumda sitenin beklediği MAM_ ön ekiyle döner.
// Only for pages whose script tag loads the MAM build.
var result = await solver.CaptchaFoxAsync(
"YOUR_SITEKEY",
"https://example.com/signup",
new Dictionary<string, object?>
{
["api_server"] =
"https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/",
});Seçenekler sözlüğü api_server, proxy ve useragent değerlerini, ayrıca proxytype ve saniye cinsinden çağrı başına bir zaman aşımını alır. useragent seçeneği diğer servislerle uyumluluk için vardır ve uygulanmaz, çünkü CapSkip gerçek bir tarayıcıda, o tarayıcının kendi tutarlı kimliğiyle çözer. Tanınmayan bir anahtar ya da boş bir sitekey veya sayfa URL’si, daha hiçbir istek yapılmadan bir ValidationException fırlatır.
3. Adım: token’ı üreten user agent ile gönderin
Kabul edilen bir token’ı reddedilenden ayıran adım budur. CaptchaFox widget’ı çalıştıran tarayıcıyı puanlar ve verdiği token o tarayıcıya aittir. Siz eklemedikçe HttpClient hiçbir User-Agent başlığı göndermez; koda sabitlenmiş bir masaüstü dizesi de aynı derecede yanlıştır. Bu yüzden CapSkip’in döndürdüğü değeri, token’ı taşıyan isteğe kopyalayın.
// http is your HttpClient; result comes from Step 2.
var request = new HttpRequestMessage(HttpMethod.Post, "https://example.com/signup")
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["email"] = "[email protected]",
["cf-captcha-response"] = result.Token!,
}),
};
// The token is bound to the browser that produced it.
if (result.UserAgent is { } ua)
request.Headers.TryAddWithoutValidation("User-Agent", ua);
var response = await http.SendAsync(request);TryAddWithoutValidation bilinçli bir tercihtir. Daha katı olan UserAgent.ParseAdd dizeyi başlık dilbilgisine göre kontrol eder ve ikisi uyuşmadığında bir FormatException fırlatır; oysa bu değer, içinde ne olursa olsun bayt bayt aynen gitmelidir. Değeri istemcinin varsayılan başlıklarında değil, istek başına ayarlayın; böylece tek bir HttpClient birkaç çözümden gelen token’ları taşıyabilir.
İki kural daha, CaptchaFox’un token’ı site tarafında nasıl kontrol ettiğinden doğar. CaptchaFox’un kendi dokümantasyonuna göre her token yalnızca bir kez ve ancak kısa bir süre içinde doğrulanabilir, bu yüzden göndermek üzereyken çözün, token’ı bir kez gönderin ve form yarıda bırakılıp sonra sürdürülürse yeniden çözün. Ayrıca token’ı opak kabul edin: onu üreten oturuma karşı kontrol edilir, dolayısıyla kırpmak ya da yeniden kodlamak onu bozar. Bazı entegrasyonlar token’ı form gönderimi yerine bir JSON gövdesinde gönderir; bu yüzden DevTools açıkken formu bir kez elle gönderin ve sayfanın gönderdiğini birebir taklit edin.
4. Adım: proxy’ler, challenge türleri ve zaman aşımları
CaptchaFox yalnızca tarayıcıyı değil, widget’ın çalıştığı ağı da puanlar. Test ve ara sıra yapılan çözümler için tek bir adres yeterlidir, ancak aynı adresten tekrarlanan çözümler o adresi önce etkileşimli challenge’lara, ardından ret yanıtlarına doğru iter. Kayda değer bir hacimde çözmeye başladığınızda CapSkip’te bir proxy havuzu yapılandırın ya da istek başına bir proxy gönderin. Bunu yaparsanız gönderimi de aynı çıkış üzerinden yapın; böylece token ve form tek bir ağdan gelir. CaptchaFox’un doğrulaması, bir sitenin ziyaretçinin IP adresini token ile birlikte iletmesine izin verir; bu da ikisini tek bir rotada tutmak için bir neden daha.
// using System.Net; for WebProxy and NetworkCredential.
// Same exit address for the solve and the submit.
var result = await solver.CaptchaFoxAsync("YOUR_SITEKEY", pageUrl,
new Dictionary<string, object?>
{
["proxy"] = new Proxy("HTTP", "login:[email protected]:8080"),
});
var http = new HttpClient(new HttpClientHandler
{
Proxy = new WebProxy("http://1.2.3.4:8080")
{
Credentials = new NetworkCredential("login", "password"),
},
});Hangi challenge’ın görüneceğini siz seçmezsiniz. Çözümlerin çoğunda hiçbir challenge çıkmaz, çünkü tarayıcı kanıtları tek başına yeterli olur; CaptchaFox bir kaydırmalı bulmaca istediğinde CapSkip onu da tamamlar. Nadir görülen iki yedek challenge ise çözülmez.
| Challenge türü | Ne sıklıkla | Çözülen |
|---|---|---|
| Görünmez, hiçbir şey gösterilmez | Genellikle | Evet |
| Kaydırmalı bulmaca | Bazen | Evet |
| Görsel seçme | Nadiren | Hayır, çözülemez olarak raporlanır |
| Ses | Nadiren | Hayır, çözülemez olarak raporlanır |
Çözülemez bildirimi, zaman aşımının dolması beklenmeden hızlıca bir ApiException olarak gelir. Yeniden deneme genellikle farklı bir challenge getirir; bu yüzden bunu bozuk bir anahtarın işareti olarak değil, yeniden gönderme nedeni olarak görün. Aşağıdaki tam örnek yalnızca bu durumu iki kez yeniden dener, başka hiçbir şeyi değil; çünkü ApiException, yanlış bir API anahtarı gibi yeniden denemenin düzeltemeyeceği hataları da kapsar.
CaptchaFoxAsync, varsayılanı 300 saniye olan recaptchaTimeout ile yoklama yapar, çünkü bu gerçek bir tarayıcı oturumudur ve bir kaydırmalı bulmaca çıktığında daha uzun sürer. CapSkip de kendi zamanlayıcılarını çalıştırır: bir görev, 10 CaptchaFox thread’inden (Max. Threads) biri için en fazla 250 saniye (Wait Timeout) bekleyebilir ve tek bir deneme 150 saniye (Row Timeout) alır. Bu yüzden bir proxy yüzünden yavaşlayan deneme önce CapSkip içinde başarısız olur ve SDK tarafında daha uzun bir zaman aşımı ona ek süre kazandırmaz. Retries varsayılan değeri olan 0’dayken ve boş bir thread varsa bu başarısızlık, SDK’nın 300 saniyesi dolmadan çok önce size bir ApiException olarak ulaşır; görev uzun süre kuyrukta beklerse SDK önce kendi sınırına ulaşabilir ve bunun yerine bir CapSkip.TimeoutException fırlatabilir.
SDK zaman aşımını yalnızca CapSkip’in CaptchaFox ayarlarında Retries (0-3) değerini yükselttiğinizde artırmanız gerekir, çünkü her ek yeniden deneme tek bir çağrıya en fazla bir Row Timeout daha ekleyebilir. Bu durumda seçenekler sözlüğünde daha uzun bir timeout verin ya da constructor’da recaptchaTimeout değerini yükseltin.
Çö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;
// Copied by hand from the script tag, for pages that load the MAM build.
const string MamPackage = "https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/";
var pageUrl = "https://example.com/signup";
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);
// Read the sitekey off the captchafox container, in either attribute order.
var html = await http.GetStringAsync(pageUrl);
var widget = Regex.Match(html,
"<[^>]*class=\"(?:[^\"]*\\s)?captchafox(?:\\s[^\"]*)?\"[^>]*>").Value;
var sitekey = Regex.Match(widget, "data-sitekey=\"([^\"]+)\"").Groups[1].Value;
// MAM pages may carry the key in the script src instead.
if (sitekey.Length == 0)
sitekey = Regex.Match(html,
"captchafox[^\"]*/api\\.js\\?key=([^\"&]+)").Groups[1].Value;
if (sitekey.Length == 0)
throw new InvalidOperationException("No sitekey in the HTML; find it in DevTools.");
// The same CDN serves other packages, so match the captchafox one.
var options = new Dictionary<string, object?>();
if (html.Contains("mampkg/@mamdev/core.frontend.libs.captchafox"))
options["api_server"] = MamPackage;
try
{
// Image-select and audio come back unsolvable; a retry redraws.
// Other API errors, such as a wrong key, are not worth repeating.
SolveResult? result = null;
for (var attempt = 1; result is null; attempt++)
{
try
{
result = await solver.CaptchaFoxAsync(sitekey, pageUrl, options);
}
catch (ApiException ex) when (attempt < 3 && ex.Message.Contains("UNSOLVABLE"))
{
Console.WriteLine($"attempt {attempt}: {ex.Message}");
}
}
var request = new HttpRequestMessage(HttpMethod.Post, pageUrl)
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["email"] = "[email protected]",
["cf-captcha-response"] = result.Token!,
}),
};
if (result.UserAgent is { } ua)
request.Headers.TryAddWithoutValidation("User-Agent", ua);
// Post wherever the form's action attribute points.
var response = await http.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode}, UA sent: {result.UserAgent is not null}");
}
catch (CapSkip.ValidationException ex)
{
// An option the method does not take.
Console.WriteLine($"not sent: {ex.Message}");
}
catch (CapSkip.TimeoutException)
{
Console.WriteLine("gave up waiting; recaptchaTimeout is 300 seconds");
}
catch (CapSkipError ex)
{
// The third unsolvable result, a refused key, or CapSkip unreachable.
Console.WriteLine($"gave up: {ex.Message}");
}Regex sınıf adını boşluklarla sınırlar, böylece captchafox-wrapper gibi bir öğe yanlışlıkla eşleşmez; ayrıca CaptchaFox’un kendi kod parçacığında olduğu gibi çift tırnaklı öznitelikler bekler. Çözüm her çalıştırmada anında başarısız oluyorsa her şeyden önce sayfa URL’sini kontrol edin: kayıtlı alan adlarının dışında kullanılan bir anahtar her seferinde aynı şekilde başarısız olur. Regex hiçbir şey bulamazsa sayfa widget’ı script ile render ediyordur ve anahtar, 1. adımda anlatıldığı gibi render çağrısında ya da Network sekmesindedir. Bu metodun arkasındaki ham endpoint şurada belgelenmiştir: API referansı. Paketin sunduğu diğer tüm metotlar ise şurada listelenir: C# CAPTCHA çözücü sayfası.
Sık görülen hatalar ve anlamları
| Gördüğünüz | Neden | Düzeltme |
|---|---|---|
| Site, CapSkip’in çözüldü olarak döndürdüğü bir token’ı reddediyor | İstek, token’ın üretildiği User-Agent’tan farklı bir User-Agent ile gönderildi | result.UserAgent değerini gönderim isteğinde bayt bayt aynen kullanın |
| User agent eşleştiği hâlde reddediliyor | Site MAM paketini yüklüyor ama çözümde varsayılan widget kullanıldı ya da tam tersi | Script etiketini okuyun ve api_server değerini ona göre ayarlayın |
| Sitenin reddettiği, MAM_ ile başlayan bir token | api_server, standart widget’ı yükleyen bir sayfa için ayarlanmış | Seçeneği kaldırın ve varsayılanı kullanın |
| Tek bir anahtar için her seferinde hemen gelen bir ApiException | Sayfa URL’si, anahtarın kayıtlı olduğu alan adlarının dışında | Bir yönlendirmeyi ya da arama sonucunu değil, widget’ın çalıştığı sayfayı gönderin |
| Ara sıra gelen, CAPTCHA’nın çözülemez olduğunu söyleyen bir ApiException | CaptchaFox bir görsel seçme veya ses challenge’ı çıkardı | Yeniden gönderin; bir sonraki deneme genellikle farklı bir challenge getirir |
| Çalışma ilerledikçe artan challenge’lar, ardından ret yanıtları | Her çözüm tek bir adresten geliyor ve CaptchaFox ağı puanlıyor | Çözümleri bir proxy havuzuna dağıtın ve gönderimi aynı çıkış üzerinden yapın |
| Bir kez çalışan token ikinci gönderimde başarısız oluyor | Her token yalnızca bir kez doğrulanır ve süresi çabuk dolar | Her gönderim için yeniden çözün ve hemen gönderin |
| Daha hiçbir şey gönderilmeden gelen bir ValidationException | Sitekey veya sayfa URL’si boştu ya da seçeneklerde metodun kabul etmediği bir anahtar vardı | Regex’in öğeyi bulduğunu kontrol edin ve mesajda adı geçen seçeneği çıkarın |
| İ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
Çoğu CAPTCHA türü user agent istemezken CaptchaFox neden istiyor?
Çünkü bir kişiden bir şey okumasını istemek yerine tarayıcıyı puanlar. Token, servisin belirli bir tarayıcı hakkındaki kararıdır; bu yüzden ancak o tarayıcıdan geri geldiğinde anlam taşır. Cloudflare Turnstile challenge sayfaları da aynı şekilde çalışır ve bunun C# tarafı şurada ele alınıyor: Turnstile challenge sayfası rehberi. CapSkip user agent’ı tam olarak bu iki tür için döndürür; bu da nerede önemli olduğuna dair güvenilir bir ipucudur.
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 Friendly Captcha çözmekten farkı nedir?
İkisi de CapSkip 1.4.0 ile geldi ve ikisi de 300 saniyelik zaman aşımını kullanır; ortak noktaların çoğu bundan ibarettir. Friendly Captcha’da karar, sitenin hangi protokol sürümünü çalıştırdığıdır ve token bir user agent’a bağlı değildir. CaptchaFox’ta ise kararlar, sitenin hangi widget kaynağını yüklediği ve token’ı hangi user agent’ın taşıdığıdır. Friendly Captcha tarafı şurada ele alınıyor: C# Friendly Captcha rehberi.
Birden fazla CaptchaFox token’ını aynı anda çözebilir miyim?
Evet. İstemci async olduğu için birkaç CaptchaFoxAsync çağrısı üzerinde çalışan bir Task.WhenAll onları yan yana yürütür. CapSkip varsayılan olarak aynı anda 10 CaptchaFox çözümü çalıştırır (CaptchaFox ayarlarındaki Max. Threads); geri kalanlar boş bir thread için en fazla 250 saniyelik Wait Timeout süresi kadar bekler. Bu yüzden normal çözüm sürelerinde elli çağrılık bir parti sorunsuz çalışır; daha büyük partiler için Max. Threads değerini yükseltin ya da çağrıları daha küçük gruplar hâlinde gönderin. Planlamanız gereken iki şey daha var: her token kendi user agent’ıyla eşleşir, bu yüzden sonucu ait olduğu istekle birlikte tutun; ayrıca tek bir adresten gelen eşzamanlılık challenge oranını daha erken yükseltir, bu yüzden paralel çözüm ekledikçe proxy de ekleyin.
Kısa özet
C# ile CaptchaFox çözmek için sitekey’i captchafox kapsayıcısından, render çağrısından ya da Network sekmesinden okuyun ve widget’ı hangi script’in yüklediğini kontrol edin. CaptchaFoxAsync metodunu sitekey ve gerçek sayfa URL’siyle çağırın; api_server seçeneğini yalnızca MAM paketi için ekleyin. result.Token değerini result.UserAgent ile cf-captcha-response alanında bir kez ve hemen gönderin; çözülemez bir challenge dönerse yeniden gönderin. 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ığı: CaptchaFox çözücü sayfası.
- .NET paketinin sunduğu diğer tüm metotlar: C# ve .NET çözücü sayfası.
Yeniden denemeyi nasıl kurguladığınızı belirleyen son bir nokta. Bir görsel seçme challenge’ı yüzünden bir çözüm geri döndüğünde çare basitçe bir deneme daha yapmaktır ve kendi makinenizde çalışan bir sınırsız captcha çözücü kullandığınızda bu yeniden deneme, faturalanan yeni bir çözüm yerine yalnızca birkaç saniyeye mal olur.
