From 80cd371ee30ed9d9264452f14d85a307c50c0edd Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Tue, 1 Apr 2025 17:03:16 +0200 Subject: [PATCH] Add retry to faviconextractor to bypass certain cookiewalls (#745) --- .../FaviconExtractor.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Utilities/AliasVault.FaviconExtractor/FaviconExtractor.cs b/src/Utilities/AliasVault.FaviconExtractor/FaviconExtractor.cs index b6ec42993..e29274ced 100644 --- a/src/Utilities/AliasVault.FaviconExtractor/FaviconExtractor.cs +++ b/src/Utilities/AliasVault.FaviconExtractor/FaviconExtractor.cs @@ -40,14 +40,14 @@ public static class FaviconExtractor using HttpClient client = CreateHttpClient(); - HttpResponseMessage response = await client.GetAsync(uri); - if (!response.IsSuccessStatusCode) + // First attempt + var result = await TryGetFaviconAsync(client, uri); + if (result != null) { - return null; + return result; } - var faviconNodes = await GetFaviconNodesFromHtml(response, uri); - return await TryExtractFaviconFromNodes(faviconNodes, client, uri); + return await TryGetFaviconAsync(client, uri); } /// @@ -127,6 +127,18 @@ public static class FaviconExtractor ]; } + private static async Task TryGetFaviconAsync(HttpClient client, Uri uri) + { + HttpResponseMessage response = await client.GetAsync(uri); + if (!response.IsSuccessStatusCode) + { + return null; + } + + var faviconNodes = await GetFaviconNodesFromHtml(response, uri); + return await TryExtractFaviconFromNodes(faviconNodes, client, uri); + } + private static async Task TryExtractFaviconFromNodes(HtmlNodeCollection[] faviconNodes, HttpClient client, Uri baseUri) { foreach (var nodeCollection in faviconNodes)