From 8d7f53824707a07e1b1a2bc74e680d797dc8c9de Mon Sep 17 00:00:00 2001 From: FFace32 Date: Tue, 10 Oct 2023 16:15:24 +0300 Subject: [PATCH] Added GetIndex method --- src/FlareSolverrSharp/Solvers/FlareSolverr.cs | 99 +++++++++++-------- .../Types/FlareSolverrIndexResponse.cs | 12 +++ 2 files changed, 71 insertions(+), 40 deletions(-) create mode 100644 src/FlareSolverrSharp/Types/FlareSolverrIndexResponse.cs diff --git a/src/FlareSolverrSharp/Solvers/FlareSolverr.cs b/src/FlareSolverrSharp/Solvers/FlareSolverr.cs index f4e6628..f321ec0 100644 --- a/src/FlareSolverrSharp/Solvers/FlareSolverr.cs +++ b/src/FlareSolverrSharp/Solvers/FlareSolverr.cs @@ -14,6 +14,7 @@ public class FlareSolverr { private static readonly SemaphoreLocker Locker = new SemaphoreLocker(); private HttpClient _httpClient; + private readonly Uri _flareSolverrIndexUri; private readonly Uri _flareSolverrUri; public int MaxTimeout = 60000; @@ -24,6 +25,8 @@ public FlareSolverr(string flareSolverrApiUrl) var apiUrl = flareSolverrApiUrl; if (!apiUrl.EndsWith("/")) apiUrl += "/"; + + _flareSolverrIndexUri = new Uri(apiUrl); _flareSolverrUri = new Uri(apiUrl + "v1"); } @@ -66,9 +69,51 @@ public async Task DestroySession(string sessionId) return await SendFlareSolverrRequest(GetSolverRequestContent(req)); } + public Task GetIndex() + { + return SendFlareSolverrRequestInternal(null); + } + private async Task SendFlareSolverrRequest(HttpContent flareSolverrRequest) { - FlareSolverrResponse result = null; + FlareSolverrResponse result = await SendFlareSolverrRequestInternal(flareSolverrRequest); + + try + { + Enum.TryParse(result.Status, true, out FlareSolverrStatusCode returnStatusCode); + + if (returnStatusCode.Equals(FlareSolverrStatusCode.ok)) + { + return result; + } + + if (returnStatusCode.Equals(FlareSolverrStatusCode.warning)) + { + throw new FlareSolverrException( + "FlareSolverr was able to process the request, but a captcha was detected. Message: " + + result.Message); + } + + if (returnStatusCode.Equals(FlareSolverrStatusCode.error)) + { + throw new FlareSolverrException( + "FlareSolverr was unable to process the request, please check FlareSolverr logs. Message: " + + result.Message); + } + + throw new FlareSolverrException("Unable to map FlareSolverr returned status code, received code: " + + result.Status + ". Message: " + result.Message); + } + catch (ArgumentException) + { + throw new FlareSolverrException("Error parsing status code, check FlareSolverr log. Status: " + + result.Status + ". Message: " + result.Message); + } + } + + private async Task SendFlareSolverrRequestInternal(HttpContent flareSolverrRequest) + { + T result = default; await Locker.LockAsync(async () => { @@ -76,9 +121,16 @@ await Locker.LockAsync(async () => try { _httpClient = new HttpClient(); - // wait 5 more seconds to make sure we return the FlareSolverr timeout message - _httpClient.Timeout = TimeSpan.FromMilliseconds(MaxTimeout + 5000); - response = await _httpClient.PostAsync(_flareSolverrUri, flareSolverrRequest); + if (flareSolverrRequest == null) + { + response = await _httpClient.GetAsync(_flareSolverrIndexUri); + } + else + { + // wait 5 more seconds to make sure we return the FlareSolverr timeout message + _httpClient.Timeout = TimeSpan.FromMilliseconds(MaxTimeout + 5000); + response = await _httpClient.PostAsync(_flareSolverrUri, flareSolverrRequest); + } } catch (HttpRequestException e) { @@ -102,44 +154,12 @@ await Locker.LockAsync(async () => var resContent = await response.Content.ReadAsStringAsync(); try { - result = JsonConvert.DeserializeObject(resContent); + result = JsonConvert.DeserializeObject(resContent); } catch (Exception) { throw new FlareSolverrException("Error parsing response, check FlareSolverr. Response: " + resContent); } - - try - { - Enum.TryParse(result.Status, true, out FlareSolverrStatusCode returnStatusCode); - - if (returnStatusCode.Equals(FlareSolverrStatusCode.ok)) - { - return result; - } - - if (returnStatusCode.Equals(FlareSolverrStatusCode.warning)) - { - throw new FlareSolverrException( - "FlareSolverr was able to process the request, but a captcha was detected. Message: " - + result.Message); - } - - if (returnStatusCode.Equals(FlareSolverrStatusCode.error)) - { - throw new FlareSolverrException( - "FlareSolverr was unable to process the request, please check FlareSolverr logs. Message: " - + result.Message); - } - - throw new FlareSolverrException("Unable to map FlareSolverr returned status code, received code: " - + result.Status + ". Message: " + result.Message); - } - catch (ArgumentException) - { - throw new FlareSolverrException("Error parsing status code, check FlareSolverr log. Status: " - + result.Status + ". Message: " + result.Message); - } }); return result; @@ -172,7 +192,7 @@ private HttpContent GenerateFlareSolverrRequest(HttpRequestMessage request, stri { FlareSolverrRequest req; if (string.IsNullOrWhiteSpace(sessionId)) - sessionId = null; + sessionId = null; var url = request.RequestUri.ToString(); @@ -223,6 +243,5 @@ private HttpContent GenerateFlareSolverrRequest(HttpRequestMessage request, stri return GetSolverRequestContent(req); } - } -} \ No newline at end of file +} diff --git a/src/FlareSolverrSharp/Types/FlareSolverrIndexResponse.cs b/src/FlareSolverrSharp/Types/FlareSolverrIndexResponse.cs new file mode 100644 index 0000000..433ddf0 --- /dev/null +++ b/src/FlareSolverrSharp/Types/FlareSolverrIndexResponse.cs @@ -0,0 +1,12 @@ +using Newtonsoft.Json; + +namespace FlareSolverrSharp.Types +{ + public class FlareSolverrIndexResponse + { + [JsonProperty("msg")] + public string Message; + public string Version; + public string UserAgent; + } +}