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; } }
private async Task <WebClientByteResult> Run(WebRequest request) { Jackett.CurlHelper.CurlResponse response; if (request.Type == RequestType.GET) { response = await CurlHelper.GetAsync(request.Url, request.Cookies, request.Referer); } else { if (!string.IsNullOrEmpty(request.RawBody)) { logger.Debug("UnixLibCurlWebClient: Posting " + request.RawBody); } else if (request.PostData != null && request.PostData.Count() > 0) { logger.Debug("UnixLibCurlWebClient: Posting " + StringUtil.PostDataFromDict(request.PostData)); } response = await CurlHelper.PostAsync(request.Url, request.PostData, request.Cookies, request.Referer, request.RawBody); } var result = new WebClientByteResult() { Content = response.Content, Cookies = response.Cookies, Status = response.Status }; if (response.HeaderList != null) { foreach (var header in response.HeaderList) { switch (header[0].ToLowerInvariant()) { case "location": result.RedirectingTo = header[1]; break; } } } ServerUtil.ResureRedirectIsFullyQualified(request, result); return(result); }
protected async Task <WebClientByteResult> RunCurl(WebRequest request) { Jackett.CurlHelper.CurlResponse response; if (request.Type == RequestType.GET) { response = await CurlHelper.GetAsync(request.Url, request.Cookies, request.Referer, request.Headers); } else { if (!string.IsNullOrEmpty(request.RawBody)) { logger.Debug("UnixLibCurlWebClient: Posting " + request.RawBody); } else if (request.PostData != null && request.PostData.Count() > 0) { logger.Debug("UnixLibCurlWebClient: Posting " + StringUtil.PostDataFromDict(request.PostData)); } response = await CurlHelper.PostAsync(request.Url, request.PostData, request.Cookies, request.Referer, request.Headers, request.RawBody); } var result = new WebClientByteResult() { Content = response.Content, Cookies = response.Cookies, Status = response.Status }; if (response.HeaderList != null) { foreach (var header in response.HeaderList) { var key = header[0].ToLowerInvariant(); result.Headers[key] = new string[] { header[1] }; // doesn't support multiple identical headers? switch (key) { case "location": result.RedirectingTo = header[1]; break; case "refresh": if (response.Status == System.Net.HttpStatusCode.ServiceUnavailable) { //"Refresh: 8;URL=/cdn-cgi/l/chk_jschl?pass=1451000679.092-1vJFUJLb9R" var redirval = ""; var value = header[1]; var start = value.IndexOf("="); var end = value.IndexOf(";"); var len = value.Length; if (start > -1) { redirval = value.Substring(start + 1); result.RedirectingTo = redirval; // normally we don't want a serviceunavailable (503) to be a redirect, but that's the nature // of this cloudflare approach..don't want to alter BaseWebResult.IsRedirect because normally // it shoudln't include service unavailable..only if we have this redirect header. result.Status = System.Net.HttpStatusCode.Redirect; var redirtime = Int32.Parse(value.Substring(0, end)); System.Threading.Thread.Sleep(redirtime * 1000); } } break; } } } ServerUtil.ResureRedirectIsFullyQualified(request, result); return(result); }
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; } }