From 8630cc40c85f542ae2ed89e29f3b5246f64ecb7b Mon Sep 17 00:00:00 2001 From: JustArchi Date: Fri, 29 Apr 2016 16:37:42 +0200 Subject: [PATCH] Small WebBrowser enhancements, closes #212 --- ArchiSteamFarm/ArchiWebHandler.cs | 13 ++++++------ ArchiSteamFarm/WebBrowser.cs | 34 +++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index da945aae0..ee124749b 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -717,7 +717,7 @@ namespace ArchiSteamFarm { bool result = false; for (byte i = 0; i < WebBrowser.MaxRetries && !result; i++) { - result = await WebBrowser.UrlGet(request).ConfigureAwait(false); + result = await WebBrowser.UrlHead(request).ConfigureAwait(false); } if (!result) { @@ -731,18 +731,17 @@ namespace ArchiSteamFarm { private async Task IsLoggedIn() { string request = SteamCommunityURL + "/my/profile"; - HtmlDocument htmlDocument = null; - for (byte i = 0; i < WebBrowser.MaxRetries && htmlDocument == null; i++) { - htmlDocument = await WebBrowser.UrlGetToHtmlDocument(request).ConfigureAwait(false); + Uri uri = null; + for (byte i = 0; i < WebBrowser.MaxRetries && uri == null; i++) { + uri = await WebBrowser.UrlHeadToUri(request).ConfigureAwait(false); } - if (htmlDocument == null) { + if (uri == null) { Logging.LogGenericWTF("Request failed even after " + WebBrowser.MaxRetries + " tries", Bot.BotName); return null; } - HtmlNode htmlNode = htmlDocument.DocumentNode.SelectSingleNode("//span[@id='account_pulldown']"); - return htmlNode != null; + return !uri.AbsolutePath.StartsWith("/login", StringComparison.Ordinal); } private async Task RefreshSessionIfNeeded() { diff --git a/ArchiSteamFarm/WebBrowser.cs b/ArchiSteamFarm/WebBrowser.cs index ab468fbda..a914f3f83 100644 --- a/ArchiSteamFarm/WebBrowser.cs +++ b/ArchiSteamFarm/WebBrowser.cs @@ -83,23 +83,27 @@ namespace ArchiSteamFarm { HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(DefaultUserAgent); } - internal async Task UrlGet(string request, string referer = null) { + internal async Task UrlHead(string request, string referer = null) { if (string.IsNullOrEmpty(request)) { return false; } - using (HttpResponseMessage response = await UrlGetToResponse(request, referer).ConfigureAwait(false)) { + using (HttpResponseMessage response = await UrlHeadToResponse(request, referer).ConfigureAwait(false)) { return response != null; } } - internal async Task UrlPost(string request, Dictionary data = null, string referer = null) { + internal async Task UrlHeadToUri(string request, string referer = null) { if (string.IsNullOrEmpty(request)) { - return false; + return null; } - using (HttpResponseMessage response = await UrlPostToResponse(request, data, referer).ConfigureAwait(false)) { - return response != null; + using (HttpResponseMessage response = await UrlHeadToResponse(request, referer).ConfigureAwait(false)) { + if (response == null) { + return null; + } + + return response.RequestMessage.RequestUri; } } @@ -190,6 +194,16 @@ namespace ArchiSteamFarm { return xmlDocument; } + internal async Task UrlPost(string request, Dictionary data = null, string referer = null) { + if (string.IsNullOrEmpty(request)) { + return false; + } + + using (HttpResponseMessage response = await UrlPostToResponse(request, data, referer).ConfigureAwait(false)) { + return response != null; + } + } + private async Task UrlGetToResponse(string request, string referer = null) { if (string.IsNullOrEmpty(request)) { return null; @@ -198,6 +212,14 @@ namespace ArchiSteamFarm { return await UrlRequest(request, HttpMethod.Get, null, referer).ConfigureAwait(false); } + private async Task UrlHeadToResponse(string request, string referer = null) { + if (string.IsNullOrEmpty(request)) { + return null; + } + + return await UrlRequest(request, HttpMethod.Head, null, referer).ConfigureAwait(false); + } + private async Task UrlPostToResponse(string request, Dictionary data = null, string referer = null) { if (string.IsNullOrEmpty(request)) { return null;