private static async Task <byte[]> LoadArticleInternal(SciHubData data, ICaptchaSolvingStrategy solvingStrategy) { var bytes = await WebUtility.SimpleByteRequest(data.Url); if (bytes == null || bytes.Length < 6) { throw new SciHubException(SciHubExceptionType.Article); } if (!IsHtml(bytes)) { return(bytes); } var fullHtml = Encoding.UTF8.GetString(bytes); data.Html = fullHtml; await LoadImage(data); do { var solved = await solvingStrategy.Solve(data.ImageData); if (solved.Aborted) { return(null); } if (solved.Reload) { return(await LoadArticleInternal(data, solvingStrategy)); } await PostCaptcha(data, solved.Captcha); if (data.ArticleData == null) { await solvingStrategy.Invalidate(solved.Captcha); } }while (data.ArticleData == null); return(data.ArticleData); }
public static async Task <byte[]> LoadArticle(string url, ICaptchaSolvingStrategy strategy) { var data = new SciHubData { Url = url }; try { await strategy.Initialize(); var result = await LoadArticleInternal(data, strategy); return(result); } catch { throw; } finally { await strategy.Finish(); } }