動作環境:.NET 6 以上。標準ライブラリ(HttpClient、System.Text.Json)のみを使用します。
dotnet new console -o YesCaptchaDemocd YesCaptchaDemo# 下のコードで Program.cs を置き換えるexport YESCAPTCHA_CLIENT_KEY=你的clientKeydotnet run// YesCaptcha C# sample (.NET 6+): check the balance, then solve a reCAPTCHA v2.// Run: dotnet new console -o YesCaptchaDemo, replace Program.cs with this file, set YESCAPTCHA_CLIENT_KEY, then dotnet runusing System;using System.Net.Http;using System.Net.Http.Json;using System.Text.Json;using System.Text.Json.Nodes;using System.Threading.Tasks;
class Program{ const string Api = "https://api.yescaptcha.com"; static readonly HttpClient Http = new HttpClient { Timeout = TimeSpan.FromSeconds(30) }; static readonly string ClientKey = Environment.GetEnvironmentVariable("YESCAPTCHA_CLIENT_KEY") ?? "";
static async Task<JsonNode> Call(string method, JsonObject payload) { payload["clientKey"] = ClientKey; var res = await Http.PostAsJsonAsync($"{Api}/{method}", payload); var data = JsonNode.Parse(await res.Content.ReadAsStringAsync())!; if ((int?)data["errorId"] != 0) throw new Exception($"{data["errorCode"]}: {data["errorDescription"]}"); return data; }
static async Task<JsonNode> Solve(JsonObject task) { var created = await Call("createTask", new JsonObject { ["task"] = task }); if ((string?)created["status"] == "ready") return created["solution"]!; // synchronous types var taskId = (string)created["taskId"]!; for (var i = 0; i < 36; i++) // poll every 5 seconds, for up to about 3 minutes { await Task.Delay(5000); var result = await Call("getTaskResult", new JsonObject { ["taskId"] = taskId }); if ((string?)result["status"] == "ready") return result["solution"]!; } throw new TimeoutException(taskId); }
static async Task Main() { var balance = await Call("getBalance", new JsonObject()); Console.WriteLine($"balance (points): {balance["balance"]}");
var solution = await Solve(new JsonObject { ["type"] = "NoCaptchaTaskProxyless", ["websiteURL"] = "https://www.google.com/recaptcha/api2/demo", ["websiteKey"] = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }); Console.WriteLine(solution["gRecaptchaResponse"]); }}他のタスクタイプに切り替えるときは、Solve に渡すタスクオブジェクトだけを変更します。フィールドは各 タスクタイプ のページを参照してください。同期タイプ(画像認識、ImageToTextTaskOcrBase)は createTask の中で直接結果を返します。Solve はこのケースにも対応済みです。
© YesCaptcha