Small WebBrowser enhancements, closes #212

This commit is contained in:
JustArchi
2016-04-29 16:37:42 +02:00
parent 3683195a0e
commit 8630cc40c8
2 changed files with 34 additions and 13 deletions

View File

@@ -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<bool?> 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<bool> RefreshSessionIfNeeded() {

View File

@@ -83,23 +83,27 @@ namespace ArchiSteamFarm {
HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(DefaultUserAgent);
}
internal async Task<bool> UrlGet(string request, string referer = null) {
internal async Task<bool> 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<bool> UrlPost(string request, Dictionary<string, string> data = null, string referer = null) {
internal async Task<Uri> 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<bool> UrlPost(string request, Dictionary<string, string> 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<HttpResponseMessage> 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<HttpResponseMessage> 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<HttpResponseMessage> UrlPostToResponse(string request, Dictionary<string, string> data = null, string referer = null) {
if (string.IsNullOrEmpty(request)) {
return null;