public override async Task <ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); CQ cq = loginPage.Content; var captcha = cq.Find(".g-recaptcha"); // invisible recaptcha if (captcha.Any()) { var result = configData; result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = captcha.Attr("data-sitekey"); result.Captcha.Version = "2"; return(result); } else { var result = new ConfigurationDataBasicLogin(); result.SiteLink.Value = configData.SiteLink.Value; result.Instructions.Value = configData.Instructions.Value; result.Username.Value = configData.Username.Value; result.Password.Value = configData.Password.Value; result.CookieHeader.Value = loginPage.Cookies; return(result); } }
public override async Task <ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(StartPageUrl, string.Empty); var parser = new HtmlParser(); var dom = parser.ParseDocument(loginPage.Content); var recaptcha = dom.QuerySelector(".g-recaptcha"); if (recaptcha != null) { var result = configData; result.Captcha.Version = "2"; result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = recaptcha.GetAttribute("data-sitekey"); return(result); } var stdResult = new ConfigurationDataBasicLogin { SiteLink = { Value = configData.SiteLink.Value }, Username = { Value = configData.Username.Value }, Password = { Value = configData.Password.Value }, CookieHeader = { Value = loginPage.Cookies } }; return(stdResult); }
public async Task <IndexerConfigurationStatus> ApplyConfiguration(JToken configJson) { var incomingConfig = new ConfigurationDataBasicLogin(); incomingConfig.LoadValuesFromJson(configJson); var pairs = new Dictionary <string, string> { { "username", incomingConfig.Username.Value }, { "password", incomingConfig.Password.Value }, { "login", "Login" }, { "keeplogged", "1" } }; // Do the login var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, string.Empty, true, SiteLink); await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php?"), () => { CQ dom = response.Content; dom["#loginform > table"].Remove(); var errorMessage = dom["#loginform"].Text().Trim().Replace("\n\t", " "); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)incomingConfig); }); return(IndexerConfigurationStatus.RequiresTesting); }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", config.Password.Value }, { "remember_me", "on" }, { "login", "submit" } }; var content = new FormUrlEncodedContent(pairs); var response = await client.PostAsync(LoginUrl, content); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("/user/account/logout")) { CQ dom = responseContent; var messageEl = dom[".ui-state-error"].Last(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); cookies.DumpToJson(SiteLink, configSaveData); if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public override async Task <ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(StartPageUrl, string.Empty); CQ cq = loginPage.Content; var result = this.configData; CQ recaptcha = cq.Find(".g-recaptcha").Attr("data-sitekey"); if (recaptcha.Length != 0) // recaptcha not always present in login form, perhaps based on cloudflare uid or just phase of the moon { result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey"); result.Captcha.Version = "2"; return(result); } else { var stdResult = new ConfigurationDataBasicLogin(); stdResult.SiteLink.Value = configData.SiteLink.Value; stdResult.Username.Value = configData.Username.Value; stdResult.Password.Value = configData.Password.Value; stdResult.CookieHeader.Value = loginPage.Cookies; return(stdResult); } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", config.Password.Value } }; var content = new FormUrlEncodedContent(pairs); var response = await client.PostAsync(LoginUrl, content); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("logout.php")) { CQ dom = responseContent; var messageEl = dom["table.detail td.text"].Last(); messageEl.Children("a").Remove(); messageEl.Children("style").Remove(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); cookies.DumpToJson(SiteLink, configSaveData); if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public override async Task <ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(LoginUrl, configData.CookieHeader.Value); CQ cq = loginPage.Content; string recaptchaSiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey"); if (recaptchaSiteKey != null) { var result = this.configData; result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = recaptchaSiteKey; result.Captcha.Version = "2"; return(result); } else { var result = new ConfigurationDataBasicLogin(); result.SiteLink.Value = configData.SiteLink.Value; result.Instructions.Value = configData.Instructions.Value; result.Username.Value = configData.Username.Value; result.Password.Value = configData.Password.Value; result.CookieHeader.Value = loginPage.Cookies; return(result); } }
public override async Task <ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(StartPageUrl, string.Empty); CQ cq = loginPage.Content; var result = configData; result.Captcha.Version = "2"; CQ recaptcha = cq.Find(".g-recaptcha").Attr("data-sitekey"); if (recaptcha.Length != 0) { result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey"); return(result); } else { var stdResult = new ConfigurationDataBasicLogin(); stdResult.SiteLink.Value = configData.SiteLink.Value; stdResult.Username.Value = configData.Username.Value; stdResult.Password.Value = configData.Password.Value; stdResult.CookieHeader.Value = loginPage.Cookies; return(stdResult); } }
public async Task <ConfigurationData> GetConfigurationForSetup() { await client.GetAsync(new Uri(BaseUrl)); var config = new ConfigurationDataBasicLogin(); return((ConfigurationData)config); }
public async Task ApplyConfiguration(JToken configJson) { var configSaveData = new JObject(); if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", @config.Password.Value }, { "login", "Login" }, { "keeplogged", "1" } }; var content = new FormUrlEncodedContent(pairs); var message = CreateHttpRequest(new Uri(LoginUrl)); message.Content = content; //message.Headers.Referrer = new Uri(LoginUrl); string responseContent; configSaveData = new JObject(); if (Program.IsWindows) { // If Windows use .net http var response = await client.SendAsync(message); responseContent = await response.Content.ReadAsStringAsync(); cookies.DumpToJson(SiteLink, configSaveData); } else { // If UNIX system use curl, probably broken due to missing chromeUseragent record for CURL...cannot test var response = await CurlHelper.PostAsync(LoginUrl, pairs); responseContent = Encoding.UTF8.GetString(response.Content); cookieHeader = response.CookieHeader; configSaveData["cookie_header"] = cookieHeader; } if (!responseContent.Contains("logout.php?")) { CQ dom = responseContent; dom["#loginform > table"].Remove(); var errorMessage = dom["#loginform"].Text().Trim().Replace("\n\t", " "); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary <string, string> { { "username", config.Username.Value }, { "password", config.Password.Value }, { "submit", "come on in" } }; var content = new FormUrlEncodedContent(pairs); string responseContent; JArray cookieJArray; if (Program.IsWindows) { // If Windows use .net http var response = await client.PostAsync(LoginUrl, content); responseContent = await response.Content.ReadAsStringAsync(); cookieJArray = cookies.ToJson(SiteLink); } else { // If UNIX system use curl var response = await CurlHelper.PostAsync(LoginUrl, pairs); responseContent = Encoding.UTF8.GetString(response.Content); cookieHeader = response.CookieHeader; cookieJArray = new JArray(response.CookiesFlat); } if (!responseContent.Contains("nav_profile")) { CQ dom = responseContent; var messageEl = dom["#login_box_desc"]; var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); configSaveData["cookies"] = cookieJArray; if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", config.Password.Value }, { "login", "Log in" }, { "keeplogged", "1" } }; var content = new FormUrlEncodedContent(pairs); string responseContent; JArray cookieJArray; if (Program.IsWindows) { // If Windows use .net http var response = await client.PostAsync(LoginUrl, content); responseContent = await response.Content.ReadAsStringAsync(); cookieJArray = cookies.ToJson(SiteLink); } else { // If UNIX system use curl var response = await CurlHelper.PostAsync(LoginUrl, pairs); responseContent = Encoding.UTF8.GetString(response.Content); cookieHeader = response.CookieHeader; cookieJArray = new JArray(response.CookiesFlat); } if (!responseContent.Contains("logout.php?")) { CQ dom = responseContent; dom["#loginform > table"].Remove(); var errorMessage = dom["#loginform"].Text().Trim().Replace("\n\t", " "); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); configSaveData["cookies"] = cookieJArray; if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", config.Password.Value }, { "submit", "come on in" } }; var content = new FormUrlEncodedContent(pairs); string responseContent; var configSaveData = new JObject(); if (Program.IsWindows) { // If Windows use .net http var response = await client.PostAsync(LoginUrl, content); responseContent = await response.Content.ReadAsStringAsync(); cookies.DumpToJson(SiteLink, configSaveData); } else { // If UNIX system use curl var response = await CurlHelper.PostAsync(LoginUrl, pairs); responseContent = Encoding.UTF8.GetString(response.Content); cookieHeader = response.CookieHeader; configSaveData["cookie_header"] = cookieHeader; } if (!responseContent.Contains("nav_profile")) { CQ dom = responseContent; var messageEl = dom["#login_box_desc"]; var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var startMessage = CreateHttpRequest(StartPageUrl); var results = await(await client.SendAsync(startMessage)).Content.ReadAsStringAsync(); var pairs = new Dictionary <string, string> { { "username", config.Username.Value }, { "password", config.Password.Value } }; var content = new FormUrlEncodedContent(pairs); var loginRequest = CreateHttpRequest(LoginUrl); loginRequest.Method = HttpMethod.Post; loginRequest.Content = content; loginRequest.Headers.Referrer = new Uri(StartPageUrl); var response = await client.SendAsync(loginRequest); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("logout.php")) { CQ dom = responseContent; var messageEl = dom["#login"]; messageEl.Children("form").Remove(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); configSaveData["cookies"] = cookies.ToJson(SiteLink); if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } IsConfigured = true; } }
public override async Task<ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(StartPageUrl, string.Empty); CQ cq = loginPage.Content; var result = new ConfigurationDataRecaptchaLogin(); CQ recaptcha = cq.Find(".g-recaptcha").Attr("data-sitekey"); if(recaptcha.Length != 0) // recaptcha not always present in login form, perhaps based on cloudflare uid or just phase of the moon { result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey"); return result; } else { var stdResult = new ConfigurationDataBasicLogin(); stdResult.CookieHeader.Value = loginPage.Cookies; return stdResult; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary <string, string> { { "username", config.Username.Value }, { "password", config.Password.Value } }; var content = new FormUrlEncodedContent(pairs); var message = new HttpRequestMessage(); message.Method = HttpMethod.Post; message.Content = content; message.RequestUri = new Uri(BaseUrl); message.Headers.Referrer = new Uri(BaseUrl); message.Headers.UserAgent.ParseAdd(chromeUserAgent); var response = await client.SendAsync(message); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("/my.php")) { CQ dom = responseContent; var messageEl = dom["body > div"].First(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); configSaveData["cookies"] = cookies.ToJson(SiteLink); if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var startMessage = CreateHttpRequest(StartPageUrl); var results = await (await client.SendAsync(startMessage)).Content.ReadAsStringAsync(); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", config.Password.Value } }; var content = new FormUrlEncodedContent(pairs); var loginRequest = CreateHttpRequest(LoginUrl); loginRequest.Method = HttpMethod.Post; loginRequest.Content = content; loginRequest.Headers.Referrer = new Uri(StartPageUrl); var response = await client.SendAsync(loginRequest); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("logout.php")) { CQ dom = responseContent; var messageEl = dom["#login"]; messageEl.Children("form").Remove(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); cookies.DumpToJson(SiteLink, configSaveData); if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", config.Username.Value }, { "password", config.Password.Value } }; var content = new FormUrlEncodedContent(pairs); var message = new HttpRequestMessage(); message.Method = HttpMethod.Post; message.Content = content; message.RequestUri = new Uri(BaseUrl); message.Headers.Referrer = new Uri(BaseUrl); message.Headers.UserAgent.ParseAdd(chromeUserAgent); var response = await client.SendAsync(message); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("/my.php")) { CQ dom = responseContent; var messageEl = dom["body > div"].First(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); cookies.DumpToJson(SiteLink, configSaveData); if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var incomingConfig = new ConfigurationDataBasicLogin(); incomingConfig.LoadValuesFromJson(configJson); var pairs = new Dictionary<string, string> { { "username", incomingConfig.Username.Value }, { "password", incomingConfig.Password.Value }, { "login", "Login" }, { "keeplogged", "1" } }; // Do the login var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, string.Empty, true, SiteLink); await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php?"), () => { CQ dom = response.Content; dom["#loginform > table"].Remove(); var errorMessage = dom["#loginform"].Text().Trim().Replace("\n\t", " "); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)incomingConfig); }); }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var startMessage = CreateHttpRequest(LoginUrl); var results = await (await client.SendAsync(startMessage)).Content.ReadAsStringAsync(); var pairs = new Dictionary<string, string> { { "uid", config.Username.Value }, { "pwd", config.Password.Value } }; var content = new FormUrlEncodedContent(pairs); var loginRequest = CreateHttpRequest(LoginUrl); loginRequest.Method = HttpMethod.Post; loginRequest.Content = content; loginRequest.Headers.Referrer = new Uri("https://hd-torrents.org/torrents.php"); var response = await client.SendAsync(loginRequest); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("If your browser doesn't have javascript enabled")) { var errorMessage = "Couldn't login"; throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); cookies.DumpToJson(SiteLink, configSaveData); if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary <string, string> { { "username", config.Username.Value }, { "password", config.Password.Value }, { "keeplogged", "1" }, { "login", "Login" } }; var content = new FormUrlEncodedContent(pairs); var response = await client.PostAsync(LoginUrl, content); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("logout.php")) { CQ dom = responseContent; var messageEl = dom["#loginform"]; messageEl.Children("table").Remove(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); configSaveData["cookies"] = cookies.ToJson(SiteLink); if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } IsConfigured = true; } }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary <string, string> { { "username", config.Username.Value }, { "password", config.Password.Value }, { "remember_me", "on" }, { "login", "submit" } }; var content = new FormUrlEncodedContent(pairs); var response = await client.PostAsync(LoginUrl, content); var responseContent = await response.Content.ReadAsStringAsync(); if (!responseContent.Contains("/user/account/logout")) { CQ dom = responseContent; var messageEl = dom[".ui-state-error"].Last(); var errorMessage = messageEl.Text().Trim(); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { var configSaveData = new JObject(); configSaveData["cookies"] = cookies.ToJson(SiteLink); if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } IsConfigured = true; } }
public Task<ConfigurationData> GetConfigurationForSetup() { var config = new ConfigurationDataBasicLogin(); return Task.FromResult<ConfigurationData>(config); }
public override async Task<ConfigurationData> GetConfigurationForSetup() { var loginPage = await RequestStringWithCookies(StartPageUrl, string.Empty); CQ cq = loginPage.Content; var result = this.configData; result.Captcha.Version = "2"; CQ recaptcha = cq.Find(".g-recaptcha").Attr("data-sitekey"); if (recaptcha.Length != 0) { result.CookieHeader.Value = loginPage.Cookies; result.Captcha.SiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey"); return result; } else { var stdResult = new ConfigurationDataBasicLogin(); stdResult.Username.Value = configData.Username.Value; stdResult.Password.Value = configData.Password.Value; stdResult.CookieHeader.Value = loginPage.Cookies; return stdResult; } }
public async Task<ConfigurationData> GetConfigurationForSetup() { await client.GetAsync(new Uri(BaseUrl)); var config = new ConfigurationDataBasicLogin(); return (ConfigurationData)config; }
public async Task ApplyConfiguration(JToken configJson) { var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); username = config.Username.Value; password = config.Password.Value; try { await GetAuthToken(true); } catch (Exception ex) { throw new ExceptionWithConfigData(ex.Message, (ConfigurationData)config); } var configSaveData = new JObject(); configSaveData["username"] = username; configSaveData["password"] = password; configSaveData["token"] = token; configSaveData["last_token_fetch"] = lastTokenFetch; if (OnSaveConfigurationRequested != null) OnSaveConfigurationRequested(this, configSaveData); IsConfigured = true; }
public Task <ConfigurationData> GetConfigurationForSetup() { var config = new ConfigurationDataBasicLogin(); return(Task.FromResult <ConfigurationData>(config)); }
public async Task ApplyConfiguration(JToken configJson) { cookies = new CookieContainer(); client = new HttpClient(handler); var configSaveData = new JObject(); if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } var config = new ConfigurationDataBasicLogin(); config.LoadValuesFromJson(configJson); var pairs = new Dictionary <string, string> { { "username", config.Username.Value }, { "password", @config.Password.Value }, { "login", "Login" }, { "keeplogged", "1" } }; var content = new FormUrlEncodedContent(pairs); var message = CreateHttpRequest(new Uri(LoginUrl)); message.Content = content; //message.Headers.Referrer = new Uri(LoginUrl); string responseContent; JArray cookieJArray; if (Program.IsWindows) { // If Windows use .net http var response = await client.SendAsync(message); responseContent = await response.Content.ReadAsStringAsync(); cookieJArray = cookies.ToJson(SiteLink); } else { // If UNIX system use curl, probably broken due to missing chromeUseragent record for CURL...cannot test var response = await CurlHelper.PostAsync(LoginUrl, pairs); responseContent = Encoding.UTF8.GetString(response.Content); cookieHeader = response.CookieHeader; cookieJArray = new JArray(response.CookiesFlat); } if (!responseContent.Contains("logout.php?")) { CQ dom = responseContent; dom["#loginform > table"].Remove(); var errorMessage = dom["#loginform"].Text().Trim().Replace("\n\t", " "); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); } else { configSaveData = new JObject(); configSaveData["cookies"] = cookieJArray; if (OnSaveConfigurationRequested != null) { OnSaveConfigurationRequested(this, configSaveData); } IsConfigured = true; } }