C# ile reCAPTCHA Enterprise çözün
solvethree'yi doğrudan C#'tan çağırabilirsiniz. Aşağıdaki örnek bir reCAPTCHA v3 Enterprise tokenı ister, görevi tamamlanana kadar izler ve çözüm başarısız olursa durur.
Bu sayfada
Çalıştırmadan önce
.NET 8+ kullanın. Ek NuGet paketi gerekmez.
- Konsolda hedef ana makine adınız için etkin bir site profili oluşturun. Site profili kurulumuna bakın.
SOLVETHREE_API_KEYdeğerini çalışma alanınızın API anahtarına,SOLVETHREE_PROXYdeğerini ise HTTP(S) proxy URL'nize ayarlayın.accounts.example.comvelogindeğerlerini ana makine adınız ve sayfanın kullandığı eylemle değiştirin.siteiçin şema veya yol içermeyen bir ana makine adı kullanın.
Görevi oluşturun ve sonucu bekleyin
dotnet new console ile bir .NET konsol projesi oluşturun, Program.cs içeriğini bu kodla değiştirin ve dotnet run komutunu çalıştırın.
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json.Nodes;
var key = Environment.GetEnvironmentVariable("SOLVETHREE_API_KEY")
?? throw new Exception("Set SOLVETHREE_API_KEY");
var proxy = Environment.GetEnvironmentVariable("SOLVETHREE_PROXY")
?? throw new Exception("Set SOLVETHREE_PROXY");
using var http = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", key);
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(180));
async Task<JsonObject> Api(HttpMethod method, string path, JsonObject? body = null)
{
using var request = new HttpRequestMessage(method, "https://api.solvethree.com/v1" + path);
if (body is not null)
request.Content = new StringContent(body.ToJsonString(), Encoding.UTF8, "application/json");
using var response = await http.SendAsync(request, deadline.Token);
response.EnsureSuccessStatusCode();
return JsonNode.Parse(await response.Content.ReadAsStringAsync(deadline.Token))!.AsObject();
}
var requestId = Guid.NewGuid().ToString(); // Save with these inputs for recovery.
var input = new JsonObject {
["site"] = "accounts.example.com", ["action"] = "login",
["proxy"] = proxy, ["requestId"] = requestId
};
var task = await Api(HttpMethod.Post, "/tasks?waitMs=0", input);
while (task["status"]!.GetValue<string>() is "pending" or "solving")
{
var id = Uri.EscapeDataString(task["id"]!.GetValue<string>());
task = await Api(HttpMethod.Get, "/tasks/" + id + "?waitMs=15000");
if (task["status"]!.GetValue<string>() is "pending" or "solving")
await Task.Delay(1000, deadline.Token);
}
if (task["status"]!.GetValue<string>() != "ready")
throw new Exception("Task failed: " + task["errorCode"]?.GetValue<string>()
+ ": " + task["error"]?.GetValue<string>());
var solution = task["solution"]!.AsObject();
// Use solution["token"], ["userAgent"] and ["secChUa"] with the original proxy.
Console.WriteLine("Ready task: " + task["id"]!.GetValue<string>());POST, görevi hemen döndürmek için waitMs=0 kullanır. Ardından her GET, bir güncelleme için en fazla 15 saniye bekler. Döngü pending veya solving durumunda devam eder, ready veya failed durumunda durur.
İstek varsayılan olarak Enterprise v3 kullanır. Standart v3 için recaptchaType: v3 ekleyin. reCAPTCHA görev gövdesine type ve url eklemeyin.
Tokenı uygulamanızda kullanın
Token, solution["token"]!.GetValue<string>() değeridir. Programın yazdırdığı görev kimliği, görevi almak içindir; uygulamanızın CAPTCHA alanında token değerini kullanın.
Hedef isteğin User-Agent ve sec-ch-ua başlıkları için solution["userAgent"] ve solution["secChUa"] değerlerini okuyun.
Bu isteği çözüm için kullanılan proxy üzerinden gönderin. Ardından uygulama yanıtını kontrol edin: token üretilmiş olması, hedefin isteği kabul ettiğini göstermez.
İstek başarısız olursa
Başarısız bir görev errorCode ve error içerir; örnek durur ve bunları bildirir. Başarısız çözümlerin ücreti iade edilir. 401 veya 402 gibi bir HTTP hatası, ayrı bir istek sorunudur; yeniden denemeden önce API hata referansını kontrol edin.
Zaman aşımından veya sürecin yeniden başlatılmasından sonra kurtarma yapmanız gerekiyorsa requestId değerini ve görev girdilerini eksiksiz saklayın. Görev kimliğiniz varsa durumunu sorgulayın. Yoksa özgün girdileri aynı requestId ile yeniden gönderin. Programı yalnızca yeniden başlatmak başka bir kimlik üretir ve ücretlendirilen başka bir çözüm oluşturabilir.
Çağıran taraf, süre sınırı dolduğunda beklemeyi bırakır; bu, önceden oluşturulmuş bir görevi iptal etmez. Tüm adımlar için durum sorgulama ve zaman aşımı sonrası kurtarma kılavuzuna bakın.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.