Skip to content

Commit

Permalink
[FEAT] HCaptchaTurboTask.cs
Browse files Browse the repository at this point in the history
  • Loading branch information
alperensert committed Jul 25, 2023
1 parent 13b6949 commit 8f35f8b
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 68 deletions.
4 changes: 2 additions & 2 deletions CapSolver/CapSolver.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>CapSolver</PackageId>
<Version>1.0.0-alpha</Version>
<Version>1.2.1</Version>
<Authors>Alperen Sert</Authors>
<Company>Alperen Sert</Company>
<PackageTags>CapSolver,ReCaptcha v2 solver, Bypass captcha, anti-captcha,</PackageTags>
Expand All @@ -17,6 +17,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<None Include="../README.md" Pack="true" PackagePath="\"/>
<None Include="../README.md" Pack="true" PackagePath="\" />
</ItemGroup>
</Project>
124 changes: 62 additions & 62 deletions CapSolver/CapSolverClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,60 +9,55 @@ namespace CapSolver;

public class CapSolverClient
{
private readonly static string Balance = "/getBalance";
private readonly static string CreateTask_ = "/createTask";
private readonly static string GetTaskResult_ = "/getTaskResult";
private readonly static string CreateTaskKasada = "/kasada/invoke";
private readonly static string CreateTaskAntiAkamai = "/akamaibmp/invoke";
private HttpClient _httpClient;
private readonly static Uri _hostUrl = new Uri("https://api.capsolver.com");
private readonly static Uri _betaHostUrl = new Uri("https://api-beta.capsolver.com");
private readonly HttpClient _httpClient;
private static readonly Uri HostUrl = new Uri("https://api.capsolver.com");
private static readonly Uri BetaHostUrl = new Uri("https://api-beta.capsolver.com");
private readonly string _clientKey;
private Proxy? _proxy = null;
private Proxy? _proxy;

public CapSolverClient(string clientKey, bool beta = false)
{
_clientKey = clientKey;
_httpClient = new HttpClient { BaseAddress = beta ? _betaHostUrl : _hostUrl };
_httpClient = new HttpClient { BaseAddress = beta ? BetaHostUrl : HostUrl };
}

public async Task<float> GetBalance()
{
VanillaTask data = new VanillaTask(_clientKey);
HttpResponseMessage response = await MakeRequest(Balance, JsonConvert.SerializeObject(data));
var r = JsonConvert.DeserializeObject<GetBalance>(await response.Content.ReadAsStringAsync());
r = await CheckResponse<GetBalance>(response);
return r!.Balance;
var data = new VanillaTask(_clientKey);
var response = await MakeRequest(Endpoints.Balance, JsonConvert.SerializeObject(data));
var r = await CheckResponse<GetBalance>(response);
return r.Balance;
}

public async Task<List<string?>> GetPackages()
{
VanillaTask data = new VanillaTask(_clientKey);
HttpResponseMessage response = await MakeRequest(Balance, JsonConvert.SerializeObject(data));
var r = JsonConvert.DeserializeObject<GetBalance>(await response.Content.ReadAsStringAsync());
r = await CheckResponse<GetBalance>(response);
return r!.Packages;
var data = new VanillaTask(_clientKey);
var response = await MakeRequest(Endpoints.Balance, JsonConvert.SerializeObject(data));
var r = await CheckResponse<GetBalance>(response);
return r.Packages;
}

public async Task<TaskResponse<T>> GetTaskResult<T>(string taskId) where T : ITaskResponse
{
VanillaTask vt = new VanillaTask(_clientKey);
vt.TaskId = taskId;
HttpResponseMessage response = await MakeRequest(GetTaskResult_, JsonConvert.SerializeObject(vt));
var r = JsonConvert.DeserializeObject<TaskResponse<T>>(await response.Content.ReadAsStringAsync());
r = await CheckResponse<TaskResponse<T>>(response);
var vt = new VanillaTask(_clientKey)
{
TaskId = taskId
};
var response = await MakeRequest(Endpoints.GetTaskResult, JsonConvert.SerializeObject(vt));
var r = await CheckResponse<TaskResponse<T>>(response);
return r;
}

public async Task<T> JoinTaskResult<T>(string taskId, int maximumTime = 120) where T : ITaskResponse
{
VanillaTask vt = new VanillaTask(_clientKey);
vt.TaskId = taskId;
for (int i = 0; i < maximumTime; i++)
var vt = new VanillaTask(_clientKey)
{
TaskId = taskId
};
for (var i = 0; i < maximumTime; i++)
{
HttpResponseMessage response = await MakeRequest(GetTaskResult_, JsonConvert.SerializeObject(vt));
var r = JsonConvert.DeserializeObject<TaskResponse<T>>(await response.Content.ReadAsStringAsync());
r = await CheckResponse<TaskResponse<T>>(response);
var response = await MakeRequest(Endpoints.GetTaskResult, JsonConvert.SerializeObject(vt));
var r = await CheckResponse<TaskResponse<T>>(response);
if (IsReady(r) && r.Solution != null)
{
return r.Solution;
Expand All @@ -74,42 +69,47 @@ public async Task<float> GetBalance()

public async Task<string> CreateTask(ITask task)
{
VanillaTask t = new VanillaTask(_clientKey);
var t = new VanillaTask(_clientKey);
t.UseAppId();
string data;
if (task is IProxyTask && IsProxyActive())
{
JObject vt = JObject.FromObject(t);
JObject t_ = JObject.FromObject(task);
JObject p = JObject.FromObject(_proxy!);
p.Merge(t_);
vt["task"] = p;
data = vt.ToString();
}
else if (task is IProxyTask && !IsProxyActive())
{
JObject vt = JObject.FromObject(t);
JObject t_ = JObject.FromObject(task);
t_["type"] += "ProxyLess";
vt["task"] = t_;
data = vt.ToString();
}
else
{
JObject vt = JObject.FromObject(t);
JObject t_ = JObject.FromObject(task);
vt["task"] = t_;
data = vt.ToString();
}
string method = CreateTask_;
if (task is AntiAkamaiBMPTask)
switch (task)
{
method = CreateTaskAntiAkamai;
case IProxyTask when IsProxyActive():
{
var vt = JObject.FromObject(t);
var to = JObject.FromObject(task);
var p = JObject.FromObject(_proxy!);
p.Merge(to);
vt["task"] = p;
data = vt.ToString();
break;
}
case IProxyTask when !IsProxyActive():
{
var vt = JObject.FromObject(t);
var to = JObject.FromObject(task);
to["type"] += "ProxyLess";
vt["task"] = to;
data = vt.ToString();
break;
}
default:
{
var vt = JObject.FromObject(t);
var to = JObject.FromObject(task);
vt["task"] = to;
data = vt.ToString();
break;
}
}
else if (task is AntiKasadaTask)
var method = task switch
{
method = CreateTaskKasada;
}
AntiAkamaiBMPTask => Endpoints.CreateTaskAntiAkamai,
AntiKasadaTask => Endpoints.CreateTaskKasada,
_ => Endpoints.CreateTask
};
if (task is HCaptchaTurboTask && IsProxyActive() == false)
throw new CapSolverException(13, "PROXY_NEEDED", "HCaptchaTurboTask requires your own proxies.");
var r = await CheckResponse<CreateTaskResponse>(await MakeRequest(method, data));
return r.TaskId;
}
Expand Down
2 changes: 1 addition & 1 deletion CapSolver/Tasks/HCaptchaTask.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace CapSolver.Tasks;
public class HCaptchaTask : ITask, IProxyTask, IUserAgentTask
{
[JsonProperty("type")]
private readonly string Type = "HCaptchaTask";
protected string Type = "HCaptchaTask";

/// <summary>
/// Address of a webpage with hCaptcha
Expand Down
12 changes: 12 additions & 0 deletions CapSolver/Tasks/HCaptchaTurboTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace CapSolver.Tasks;

public class HCaptchaTurboTask : HCaptchaTask
{
public HCaptchaTurboTask(string websiteUrl, string websiteKey,
object? enterprisePayload = null, bool? isEnterprise = null,
bool? isInvisible = null, string? userAgent = null)
: base(websiteUrl, websiteKey, enterprisePayload, isEnterprise, isInvisible, userAgent)
{
Type = "HCaptchaTurboTask";
}
}
10 changes: 10 additions & 0 deletions CapSolver/Utilities/Endpoints.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace CapSolver.Utilities;

internal static class Endpoints
{
public const string Balance = "/getBalance";
public const string CreateTask = "/createTask";
public const string GetTaskResult = "/getTaskResult";
public const string CreateTaskKasada = "/kasada/invoke";
public const string CreateTaskAntiAkamai = "/akamaibmp/invoke";
}
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
### Installation
via Package Manager:
```
NuGet\Install-Package CapSolver -Version 1.0.0
NuGet\Install-Package CapSolver -Version 1.2.1
```
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.

via .NET CLI:
```ssh
dotnet add package CapSolver --version 1.0.0
dotnet add package CapSolver --version 1.2.1
```

via adding PackageReference:
```xml
<PackageReference Include="CapSolver" Version="1.0.0" />
<PackageReference Include="CapSolver" Version="1.2.1" />
```
For projects that support PackageReference, copy this XML node into the project file to reference the package.

Expand Down

0 comments on commit 8f35f8b

Please sign in to comment.