Add retry to faviconextractor to bypass certain cookiewalls (#745)

This commit is contained in:
Leendert de Borst
2025-04-01 17:03:16 +02:00
committed by Leendert de Borst
parent 915e12d541
commit 80cd371ee3

View File

@@ -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);
}
/// <summary>
@@ -127,6 +127,18 @@ public static class FaviconExtractor
];
}
private static async Task<byte[]?> 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<byte[]?> TryExtractFaviconFromNodes(HtmlNodeCollection[] faviconNodes, HttpClient client, Uri baseUri)
{
foreach (var nodeCollection in faviconNodes)