Coder Social home page Coder Social logo

cloudflareutilities's People

Contributors

elcattivo avatar grandsilence avatar kade-robertson avatar pyguy2 avatar twix20 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cloudflareutilities's Issues

Add .Net Framework as a target.

Since .Net Framework 4.5 implements .Net Standard 1.1 as required by this project, then .Net Framework 4.5+ should be added as a library target. Everything seems to build fine in framework version so editing the project to target multiple frameworks would improve usability.

Solver is not working for kinox.to

It seems they use brackets in their calculation, so operands can be +-*/ and empty (first value in brackets) that rises an exception.
Even by fixing this, the result is different to the Firefox result, using the same request. Maybe i can send a example later this day.

I am so new

hello im so new in programming. i want use this tool. so i installed visual studio 2015 for first time in my life. then i installed this project in my visual studio by double click on CloudFlareUtilities.sln .
then i installed with Install-Package CloudFlareUtilities -Pre command succesfully.
now i dont know what i have to do?? how to use this usage code:
`try
{
// Create the clearance handler.
var handler = new ClearanceHandler
{
MaxRetries = 2 // Optionally specify the number of retries, if clearance fails (default is 3).
};

// Create a HttpClient that uses the handler to bypass CloudFlare's JavaScript challange.
var client = new HttpClient(handler);

// Use the HttpClient as usual. Any JS challenge will be solved automatically for you.
var content = await client.GetStringAsync("http://protected-site.tld/");

}
catch (AggregateException ex) when (ex.InnerException is CloudFlareClearanceException)
{
// After all retries, clearance still failed.
}
catch (AggregateException ex) when (ex.InnerException is TaskCanceledException)
{
// Looks like we ran into a timeout. Too many clearance attempts?
// Maybe you should increase client.Timeout as each attempt will take about five seconds.
}`
i want use this project for a https site. plz plz plz plz guide me guys. i worked few days on this tool but i still dont know what i have to do and if you make a video guide is soooo greate work. sorry for my bad english

Getting and setting Cookies

Hey, I just started using C# and I was looking into this PCL. I got it working after looking at examples and everything. I was wondering if it was possible to get the Cookies from the connection and using storing and sending those Cookies when a new connection is made.

If that can be done, could you please post an example? Thanks for this lib. anyways :)

Exception on accessing page exsite.pl

Hi , when trying to access site exsite24.pl protected by cloud flare
code:

using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using CloudFlareUtilities;

namespace Main
{
    class Program
    {

        static async Task Main(string[] args)
        {

            //CookieContainer cookieJar = new CookieContainer();

            var urlExsiteBase = "exsite24.pl";
            var urlWithScheme = $"https://{urlExsiteBase}";

            try
            {
                // Create the clearance handler.
                var handler = new ClearanceHandler
                {
                    MaxRetries = 2 // Optionally specify the number of retries, if clearance fails (default is 3).
                };

                // Create a HttpClient that uses the handler to bypass CloudFlare's JavaScript challange.
                var client = new HttpClient(handler);

                // Use the HttpClient as usual. Any JS challenge will be solved automatically for you.
                var content = await client.GetStringAsync(urlWithScheme);
            }
            catch (AggregateException ex) when (ex.InnerException is CloudFlareClearanceException)
            {
                // After all retries, clearance still failed.
            }
            catch (AggregateException ex) when (ex.InnerException is TaskCanceledException)
            {
                // Looks like we ran into a timeout. Too many clearance attempts?
                // Maybe you should increase client.Timeout as each attempt will take about five seconds.
            }
        }
    }
}

I got

Unhandled exception. System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'Unknown operator: ')
   at CloudFlareUtilities.ChallengeSolver.ApplyDecodingStep(Double number, Tuple`2 step)
   at System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func)
   at CloudFlareUtilities.ChallengeSolver.ResolveStepGroup(IEnumerable`1 group)
   at System.Linq.Enumerable.SelectListIterator`2.ToList()
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at CloudFlareUtilities.ChallengeSolver.DecodeSecretNumber(String challengePageContent, String targetHost)
   at CloudFlareUtilities.ChallengeSolver.Solve(String challengePageContent, String targetHost)
   at CloudFlareUtilities.ClearanceHandler.PassClearance(HttpResponseMessage response, CancellationToken cancellationToken)
   at CloudFlareUtilities.ClearanceHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at System.Net.Http.HttpClient.GetStringAsyncCore(Task`1 getTask)
   at Main.Program.Main(String[] args) in Z:\Repos.and.Projects\ExciteCrawler\WebSiteCrawler\Main\Program.cs:line 60
   at Main.Program.<Main>(String[] args)

CloudFlareException is not catching exceptions after all attempts.

...
} catch (AggregateException ex) when (ex.InnerException is CloudFlareClearanceException) {
                // After all retries, clearance still failed.
                Console.WriteLine( ex.Message );
            } catch (AggregateException ex) when (ex.InnerException is TaskCanceledException) {
                // Looks like we ran into a timeout. Too many clearance attempts?
                Console.WriteLine( ex.Message );
                // Maybe you should increase client.Timeout as each attempt will take about five seconds.
            } catch (Exception ex) {
                Console.WriteLine( ex.Message );
            }
...

The code of the example was used, and it continues giving error and was necessary to add a generic exception to capture the same.

Locking up in UI thread

Hi, thanks for the library, it works perfectly. I run into a little issue though. When adding a clearancehandler to a HttpClient and calling await client.SendAsync(msg).ConfigureAwait(false); from a UI thread it will create a dead lock because internally the clearancehandler doesn't add .ConfigureAwait(false) to its calls:

var response = await base.SendAsync(request, cancellationToken);

response = await base.SendAsync(request, cancellationToken);

await Task.Delay(5000, cancellationToken);

var passResponse = await _client.SendAsync(clearanceRequest, cancellationToken);

Any chance the .ConfigureAwait could be added to these calls?

Proxy?

Hi,

I'm actually learning c# and while trying to use this library I wanted to pass proxy into the handler, can I not do that?

Kindly guide me as to how I can pass proxy to the handler.

Thank you.

Stopped working after 2 3 times.

Hi I want to fetch some data from yobit api,as recently they have changed to cloudflare api.
I used your library(built in my system).It worked first 2 times,but
after that its not working..After digging more I found that cloudflare server expect max-age 604800..
Please look into this,your library is good library saved lot of time..
Also from nuget I am not able to install this,I had to build this

Here is my code-
string url = "https://yobit.net/api/3/info";

            var handler = new ClearanceHandler
            {
                MaxRetries = 3
            };
            var client = new HttpClient(handler);
            var result = await client.GetAsync(url);
            using (var streamReader = new StreamReader(await result.Content.ReadAsStreamAsync()))
            {

var tmp = streamReader.ReadToEnd();
}

new challenge version

The current CloudflareUtilities does not manage to handle the new challenge version, presence of a s parameter in the get /cdn-cgi/l/chk_jschl:

/cdn-cgi/l/chk_jschl?s=xxxxxxx&jschl_vc=yyyyyyyyyyyyyy&pass=zzzzzzzzz&jschl_answer=eeeeeeeee

=> modification needed

Issue with 3rd call using the HttpClient

First of all, thanks for the awesome work!

Now on my issue, the third call I make using the HttpClient, (GetStringAsync) never returns control back to the method, maybe my code is just off. But I cant seem to figure out whats going on specifically. Here's the code of my class.

using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using CloudFlareUtilities;
using HtmlAgilityPack;

namespace KissanimeApp
{
    internal static class Kissanime
    {
        private static readonly HttpClient HttpClient;
        static Kissanime()
        {
            // Add the handler to bypass the cloudfare protection
            var handler = new ClearanceHandler();
            HttpClient = new HttpClient(handler);
        }

        /// <summary>
        /// Initializes the Kissanime calls to the kissanime server.
        /// </summary>
        /// <returns></returns>
        public static async Task Initialize()
        {
            // To bypass the cloudflare
            await HttpClient.GetStringAsync("https://kissanime.to");
        }

        /// <summary>
        /// Searches kissanime for available animes by a keyword
        /// </summary>
        /// <param name="keyword">the keyword</param>
        /// <returns></returns>
        public static async Task<List<Anime>> SearchForAnime(string keyword)
        {
            // Create form data
            var values = new Dictionary<string, string> { { "keyword", keyword } };
            var content = new FormUrlEncodedContent(values);

            // Send a post request to kissanime
            var response = await HttpClient.PostAsync("https://kissanime.to/Search/Anime", content);
            var responseString = await response.Content.ReadAsStringAsync();

            // Put everything in a html document to scrape information from the document
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(responseString);

            // Find the listing table html node
            var tableNode = htmlDoc.DocumentNode
                .Descendants().First(n => n.Attributes.Contains("class") && n.Attributes["class"].Value == "listing");
            // Get all links from the table node
            var animeLinks = tableNode.Descendants().Where(n => n.Name == "a");
            // Create a new list to store the animes in

            return animeLinks.Select(animeLink => new Anime
            {
                // Store the values from the links (and trim some whitespace and other html formatting)
                Name = animeLink.InnerHtml.Trim(),
                Url = animeLink.GetAttributeValue("href", "").Trim()
            }).ToList();
        }

        /// <summary>
        /// Gets the anime information by the url (excluding the hostname etc ex: /Anime/My-Anime)
        /// </summary>
        /// <param name="url">The resource url (excluding the hostname etc ex: /Anime/My-Anime)</param>
        /// <returns></returns>
        public static async Task<Anime> GetAllAnimeInformationByUrl(string url)
        {
            var requestUrl = $"https://kissanime.to{url}";
            // Send request to kissanime
            // FIXME Gets stuck here
            var responseString = await HttpClient.GetStringAsync(requestUrl);
            // Put response in a htmlDocument
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(responseString);
            // Extract all information
            var anime = new Anime();

            // Find the listing table html node
            var tableNode = htmlDoc.DocumentNode
                .Descendants().First(n => n.Attributes.Contains("class") && n.Attributes["class"].Value == "listing");
            // Get all links from the table node
            var episodeLinks = tableNode.Descendants().Where(n => n.Name == "a");

            // Create episode list from links
            var episodeList = episodeLinks.Select(animeLink => new Episode
            {
                // Store the values from the links (and trim some whitespace and other html formatting)
                Name = animeLink.InnerHtml.Trim(),
                Url = animeLink.GetAttributeValue("href", "").Trim()
            }).ToList();

            anime.Episodes = episodeList;

            return anime;
        }
    }
}

Just take a look at GetAllAnimeInformationByUrl(string), the HttpClient.GetStringAsync(string) never returns (eventually gets a task timeout).

If Im making a stupid mistake, sorry for bothering you, just love to know whats going on

CloudFlare updated challenge?

Hi, how are you?

Looks like this solver stopped working. Comparing the traffic generated with this utility and the traffic generated by a browser, looks like that after loading the initial page with the challenge, and going to solve it, the utility try to do a "GET" with "cf_chl_jschl_tk", "pass" and "jschl_answer".

Now, in the browser's version, It changed to a "POST", and with this changes:
-Parameters "pass" and "jschl_answer" are now send throught the body.
-Added "jschl_vc" (Obtained from the initial page load) and "r" to the previous parameters.

Hope it helps the developer.

Thanks!

I Get Unknown Operator exception

The new algorithm from cloudflare is this one:

<script type="text/javascript"> //<![CDATA[ (function(){ var a = function() {try{return !!window.addEventListener} catch(e) {return !1} }, b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)}; b(function(){ var a = document.getElementById('cf-content');a.style.display = 'block'; setTimeout(function(){ var s,t,o,p,b,r,e,a,k,i,n,g,f, QWzGncw={"xjysO":+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![])+(+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![]))/+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(+!![]))}; g = String.fromCharCode; o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; e = function(s) { s += "==".slice(2 - (s.length & 3)); var bm, r = "", r1, r2, i = 0; for (; i < s.length;) { bm = o.indexOf(s.charAt(i++)) << 18 | o.indexOf(s.charAt(i++)) << 12 | (r1 = o.indexOf(s.charAt(i++))) << 6 | (r2 = o.indexOf(s.charAt(i++))); r += r1 === 64 ? g(bm >> 16 & 255) : r2 === 64 ? g(bm >> 16 & 255, bm >> 8 & 255) : g(bm >> 16 & 255, bm >> 8 & 255, bm & 255); } return r; }; t = document.createElement('div'); t.innerHTML="<a href='/'>x</a>"; t = t.firstChild.href;r = t.match(/https?:\/\//)[0]; t = t.substr(r.length); t = t.substr(0,t.length-1); k = 'cf-dn-xHHHTf'; a = document.getElementById('jschl-answer'); f = document.getElementById('challenge-form'); ;QWzGncw.xjysO+=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]))/+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![])+(+[])+(!+[]+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO*=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO+=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(+!![])+(+[])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO+=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![])+(+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![]))/+((!+[]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO-=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO-=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(+[])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]))/+((+!![]+[])+(!+[]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]));QWzGncw.xjysO-=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]))/(+(+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])))+(function(p){return eval((true+"")[0]+".ch"+(false+"")[1]+(true+"")[1]+Function("return escape")()(("")["italics"]())[2]+"o"+(undefined+"")[2]+(true+"")[3]+"A"+(true+"")[0]+"("+p+")")}(+((!+[]+!![]+[])))));QWzGncw.xjysO*=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(+!![]))/+((!+[]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]));QWzGncw.xjysO-=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO*=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![])+(+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![]))/+((!+[]+!![]+[])+(+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO+=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO-=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(+[])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));QWzGncw.xjysO+=function(p){var p = eval(eval(e("ZG9jdW1l")+(undefined+"")[1]+(true+"")[0]+(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]+g(103)+(true+"")[3]+(true+"")[0]+"Element"+g(66)+(NaN+[Infinity])[10]+"Id("+g(107)+")."+e("aW5uZXJIVE1M"))); return +(p)}();QWzGncw.xjysO+=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]))/+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]));a.value = (+QWzGncw.xjysO).toFixed(10); '; 121' f.action += location.hash; f.submit(); }, 4000); }, false); })(); //]]> </script>
There is several group with no operator.

Input string was not in a correct format.

Hi,

I tried this, but it doesnt work for some reason.

This is my code:


 using System;
 using System.Net.Http;
 using System.Text.RegularExpressions;

 namespace CloudFlareUtilities.CloudFlare_Test
 {
     class Program
     {
         static void Main(string[] args)
         {
             try
             {
                var handler = new ClearanceHandler();
                var client = new HttpClient(handler);

                var content = client.GetStringAsync("http://www.url.url/").Result;
                Console.WriteLine(content);
            }
            catch (AggregateException e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.ReadLine();
        }
    }
}

And I will get the error:

System.AggregateException: One or more errors occurred. ---> System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at CloudFlareUtilities.ChallengeSolver.DeobfuscateNumber(String obfuscatedNumber) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 43
   at CloudFlareUtilities.ChallengeSolver.<>c.<DecodeSecretNumber>b__6_0(Match s) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 29
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func)
   at CloudFlareUtilities.ChallengeSolver.DecodeSecretNumber(String challengePageContent, String targetHost) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 30
   at CloudFlareUtilities.ChallengeSolver.Solve(String challengePageContent, String targetHost) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 17
   at CloudFlareUtilities.ClearanceHandler.<PassClearance>d__14.MoveNext() in ...\CloudFlareUtilities\CloudFlareUtilities\ClearanceHandler.cs:line 125
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at CloudFlareUtilities.ClearanceHandler.<SendAsync>d__10.MoveNext() in ...\CloudFlareUtilities\CloudFlareUtilities\ClearanceHandler.cs:line 73
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at CloudFlareUtilities.CloudFlare_Test.Program.Main(String[] args) in c:\users\matthew\documents\visual studio 2015\Projects\CloudFlare Test\CloudFlare Test\Program.cs:line 16
---> (Inner Exception #0) System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at CloudFlareUtilities.ChallengeSolver.DeobfuscateNumber(String obfuscatedNumber) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 43
   at CloudFlareUtilities.ChallengeSolver.<>c.<DecodeSecretNumber>b__6_0(Match s) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 29
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func)
   at CloudFlareUtilities.ChallengeSolver.DecodeSecretNumber(String challengePageContent, String targetHost) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 30
   at CloudFlareUtilities.ChallengeSolver.Solve(String challengePageContent, String targetHost) in ...\CloudFlareUtilities\CloudFlareUtilities\ChallengeSolver.cs:line 17
   at CloudFlareUtilities.ClearanceHandler.<PassClearance>d__14.MoveNext() in ...\CloudFlareUtilities\CloudFlareUtilities\ClearanceHandler.cs:line 125
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at CloudFlareUtilities.ClearanceHandler.<SendAsync>d__10.MoveNext() in ...\CloudFlareUtilities\CloudFlareUtilities\ClearanceHandler.cs:line 73<---

Line 16 is:
var content = client.GetStringAsync("http://www.url.url/").Result;

Any suggestions? Thanksx.

Stopped working after about 10 times

Hey, after a few times it seems this no longer works. I tried changing the User Agent thinking that may have been it but no luck. I used a python library which seemed to work just fine. I also tried with different sites as well.

Does it still work fine for you?

Doesn't work

Hi there it doesn't work on paribu.com.. It just hangs

Proxies not working anymore ?

Hello, first thank you for your awesome work.
I was able to use proxies through the innerHandler but since yesterday it seems that it doesn't works anymore, I keep getting failed challenges(403) and what's weird is that the challenges are solved on my IP ignoring the proxy settings(but the "initial" request to the website is done(503) with the proxy settings) which was not the case before.
I am using the latest version and it works fine on my local ip.

Thank you

Custom innerHandler not working

Hello!

First of all, thank you for this helpful library!

I have an issue with retrieving cookies from server response. As far as I understand, I have to pass HttpClientHandler object as an innerHandler parameter of the ClearanceHandler class constructor, and then extract cookies from CookieCollection.

Unfortunately, the server responds with 503 HTTP error code while using custom innerHandler:

var cookieContainer = new CookieContainer();
var innerHandler = new HttpClientHandler {CookieContainer = cookieContainer};
var handler = new ClearanceHandler(innerHandler);
var client = new HttpClient(handler);

Otherwise everything is okay (200).

var handler = new ClearanceHandler();
var client = new HttpClient(handler);

Regards, Vadim.

For use with SignalR Hub Client

I am unable to get this to work with my signalR hub client, trying to bypass the cloudflare recently implemented over bittrex.com websocket endpoints. I attach the _cfduid and cf_clearance cookies, and also use the same User-Agent header on my hubConnection obj, but i still get blocked with 503 status:

`
var handler = new ClearanceHandler();
var client = new HttpClient(handler);
var hubConnection = new HubConnection("https://www.bittrex.com/");

    try
    {

        HttpRequestMessage msg = new HttpRequestMessage()
        {
            RequestUri = new Uri("https://www.bittrex.com/"),
            Method = HttpMethod.Get
        };


        HttpResponseMessage response = await client.SendAsync(msg);
        if (response.IsSuccessStatusCode)
        {
            Console.WriteLine("SUCCESS");
        }



        IEnumerable<string> heads;
        if (msg.Headers.TryGetValues("User-Agent", out heads))
        {
            foreach (string s in heads)
            {
                Console.WriteLine(s);
                //Outputs: "Client/1.0"

                //Add User-Agent header to hubConnection
                hubConnection.Headers.Add("User-Agent", s);
            }
        }


        hubConnection.CookieContainer = new CookieContainer();
        IEnumerable<string> cookies;

        //set the "_cfduid" and "cf_clearance" cookies we recieved on the hubConnection
        if (response.Headers.TryGetValues("set-cookie", out cookies))
        {
            foreach (var c in cookies)
            {
                Uri target = new Uri("https://www.bittrex.com/");
                hubConnection.CookieContainer.SetCookies(target, c);
            }
        }


    }
    catch (AggregateException ex) when (ex.InnerException is CloudFlareClearanceException)
    {
        Console.WriteLine(ex.InnerException.Message);
    }


    Console.WriteLine("CONNECTING");




    //try to connect to the hub with attached cookies and user-agent header:
    await hubConnection.Start();

    btrexHubProxy.On<MarketDataUpdate>("updateExchangeState", update => 
    BtrexRobot.UpdateEnqueue(update));
    //btrexHubProxy.On<SummariesUpdate>("updateSummaryState", update =>  Console.WriteLine("FULL SUMMARY: "));
    btrexHubProxy = hubConnection.CreateHubProxy("coreHub");`

Excessive failures and solve times

Firstly if this has been answered in any of the previous issues i'm very sorry, i did read through them but those issues don't seem to be the same as what i'm experiencing. This library was working great for me for a few days and i loved it, no need for node.js and simple to use but yesterday i just kept getting clearance fails. i decided to try again the next day but kept getting clearance fails again so i set retries to 9 and delay to 10,000 as a last ditch effort and while it did eventually work it took 90 seconds (92946ms exactly) to get to the page which isn't particularly great. My test code is here

Bittrex Websocket again...

I have been using CloudFlareUtilities with the custom websocketSharp wrapper to access Bittrex websocket feeds, but for some reason it stopped working again today, and I am not sure why:

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 503, ReasonPhrase: 'Service Temporarily Unavailable', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Transfer-Encoding: chunked
Connection: close
X-Frame-Options: SAMEORIGIN
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
CF-RAY: 3debad8c5f1b4fff-DEN
Cache-Control: no-cache
Date: Wed, 17 Jan 2018 19:21:30 GMT
Server: cloudflare
Content-Type: text/html; charset=UTF-8
}

Invalid challenge step values calculation + wrong rounding secret + missing headers

Two causes of the issue #30.

1: Invalid challenge step values calculation (Different number precision in languages)

JS got 15 precision, C# got 16 now.

// step1 any operation
step1=+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+[])+(+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]));

step1 result by language:

2.052213451505437    // JavaScript
2.0522134515054371   // C#

Let's try some values in interactive C# and JS.
cjs

So, JS number precision != C# double precision now? (wtf? double-precision (64-bit) IEEE-754 both).
C# 16 precision, not 15

Download HTML source

1.2: The first Issue step by step

js seed = 1.8218306919992202
c# seed = 1.8218306919992202

// Rounded? precision 15, why?
js step 1 = 2.690703827262779
c# step 1 = 2.6907038272627788

// Same
js step 2 = 4.257653205191571
c# step 2 = 4.2576532051915708

// Now is fine again (16) precision
js step 3 = 1.2088149860488984
c# step 3 = 1.2088149860488984

js step 4 = 0.8404492094548377
c# step 4 = 0.8404492094548377

js step 5 = 1.8719165990861497
c# step 5 = 1.8719165990861497

js step 6 = 1.0311952177624564
c# step 6 = 1.0311952177624564

Download HTML source : step by step

2: In ClearenceQuery property, calling Answer.toString() leads to rounding

Rounding when isn't required:
solution

JS does not make rounding when there is a addition of a floating point number and an integer (the length of the string).
rounding

So the answer is incorrect in C# because Answer is rounded
inc

2.1: Interactive math language difference

calc
OFC: CultureInfo.Invariant required

2.2: Solution

Here my pull request

Using R format in ToString() call.

public string ClearanceQuery => $"{ClearancePage}?jschl_vc={VerificationCode}&pass={Pass}&jschl_answer={Answer.ToString("R", CultureInfo.InvariantCulture)}"

3: Missing headers

  1. Referer must be original URL;
  2. User-Agent should be one of most popular (signature detection). I prefer random chrome generation;
  3. Accept & Accept-Language also checked (surprise);
  4. Upgrade-Insecure-Requests no time for test it. But I prefer use it.

Correct headers example:

User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.2296.54 Safari/537.36
Referer: https://opskins.com/?loc=shop_users_page&steamid=76561198073465263
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7

For fix "Forbidden" errors - you need to add it all.

Doesn't even compile in Visual Studio

VSE 2013 desktop.

This doesn't even compile, let alone function. Some of the code doesn't even look like c#

"public CloudFlareClearanceException(int attempts) : this(attempts, $"Clearance failed after {attempts} attempt(s).") { }"

^ unexpected character "$"

[Bug] Unable to pass test if using a cookie container

Upon using a cookie container, I discovered that the test would not complete.

var cookies = new CookieContainer();
var cookiehandler = new HttpClientHandler() { CookieContainer = cookies };

// Create the clearance handler.
var handler = new ClearanceHandler(cookiehandler) {
	MaxRetries = 5 // Optionally specify the number of retries, if clearance fails (default is 3).
};

// Create a HttpClient that uses the handler to bypass CloudFlare's JavaScript challange.
var client = new HttpClient(handler);

// Use the HttpClient as usual. Any JS challenge will be solved automatically for you.
var res = await client.GetAsync("https://www.crunchyroll.com/login");

By commenting out cookiehandler) { and replacing it with ) { (removing the inner handler), the test completed immediately.

Is there anything I can do in the meantime to remedy this while it (hopefully) gets fixed?

Using in a C++/CLI project

Hello,
I wanted to use this in my C++/CLI project. I imported CloudFlareUtilities as a dll into my project, but it doesn't give response.

client.GetStringAsync(target).Result;

It's stuck at this line. How can I use it in my project? Thank you.

CurlSharp handler

Hello,

I would like to add a new Handler which could be used with CurlSharp (Allowing it to be used e.g. on Linux systems with the libcurl HTTP lib).
Before I waste any time I would like to know if you would accept a corresponding pull request.

Storing sessions

EDIT:

I have resolved this already by storing the vars properly.

Hi,

I have been using this library for a while and it works perfectly fine.
However, I am interested in optimizing my search speeds.

I am using an API which is located on a server which uses CloudFlare. The CloudFlare clearance takes relatively long for every short search query on the webserver.

I would like to store a session which I have created, so I could access the endpoint during the current session (which lasts about 30 minutes), without having to await the clearance for each lookup.

I have tried the following:

var cookieContainer = new CookieContainer();
using (var handler = new ClearanceHandler())
using (var client = new HttpClient(handler, false))
{
var result = await client.GetStringAsync("http://myapiwebsite.com/apiendpoint");
}

However, by using this, I still have to await the clearance with every search I run. Is there a way to store the current session and use it while it lasts?

Serious flaw in usage example shown in Readme

As described in this article, https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/, an application should limit the number HttpClient objects that are created and reuse it for subsequent requests. Otherwise it would open a new TCP connection for each request and it would be very easy to hit an application pools max queue length of 1000 for any website using this code as is.

The sample code in the readme should add a disclaimer describing the issue or be updated to a more complete implementation.

POST request results in 'The operation has been cancelled'

Hi,

I'm trying send a post request to a website that uses CloudFlare. However, when I do, it gives me the error
WinHttpException: The operation has been canceled as well as IOException: The read operation failed, see inner exception. and HttpRequestException: Error while copying content to a stream..

I'm executing this:

        var content = 
                client.PostAsync("https://my-website-thing.org/login/login",
                new FormUrlEncodedContent(values)).Result.Content
                .ReadAsStringAsync().Result;

If you need values/website, I'd be happy to supply them.

Thanks.

Why it doesn't work with this html?

Hi, I am trying this library to bypass Cloudflare on a website.
First thing I noticed is that the website returns 403 instead of 503. I tried to modify the code but then I had other exceptions. Is the correct library to bypass the Cloudflare on the attached html ?


2018-02-06 23:40:01.6248 DEBUG <!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Attention Required! | Cloudflare</title>
<meta name="captcha-bypass" id="captcha-bypass" />
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" type="text/css" media="screen,projection" />
<!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" type="text/css" media="screen,projection" /><![endif]-->
<style type="text/css">body{margin:0;padding:0}</style>
<!--[if lte IE 9]><script type="text/javascript" src="/cdn-cgi/scripts/jquery.min.js"></script><![endif]-->
<!--[if gte IE 10]><!--><script type="text/javascript" src="/cdn-cgi/scripts/zepto.min.js"></script><!--<![endif]-->
<script type="text/javascript" src="/cdn-cgi/scripts/cf.common.js"></script>


</head>
<body>
  <div id="cf-wrapper">
    <div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
    <div id="cf-error-details" class="cf-error-details-wrapper">
      <div class="cf-wrapper cf-header cf-error-overview">
        <h1 data-translate="challenge_headline">One more step</h1>
        <h2 class="cf-subheadline"><span data-translate="complete_sec_check">Please complete the security check to access</span> unionmangas.net</h2>
      </div><!-- /.header -->
      
      <div class="cf-section cf-highlight cf-captcha-container">
        <div class="cf-wrapper">
          <div class="cf-columns two">
            <div class="cf-column">
            
              <div class="cf-highlight-inverse cf-form-stacked">
                <form class="challenge-form" id="challenge-form" action="/cdn-cgi/l/chk_captcha" method="get">
  <script type="text/javascript" src="/cdn-cgi/scripts/cf.challenge.js" data-type="normal"  data-ray="3e919bd9b1a12b46" async data-sitekey="6LfBixYUAAAAABhdHynFUIMA_sa4s-XsJvnjtgB0"></script>
  <div class="g-recaptcha"></div>
  <noscript id="cf-captcha-bookmark" class="cf-captcha-info">
    <div><div style="width: 302px">
      <div>
        <iframe src="https://www.google.com/recaptcha/api/fallback?k=6LfBixYUAAAAABhdHynFUIMA_sa4s-XsJvnjtgB0" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe>
      </div>
      <div style="width: 300px; border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
        <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;"></textarea>
        <input type="submit" value="Submit"></input>
      </div>
    </div></div>
  </noscript>
</form>

              </div>
            </div>

            <div class="cf-column">
              <div class="cf-screenshot-container">
              
                <span class="cf-no-screenshot"></span>
              
              </div>
            </div>
          </div><!-- /.columns -->
        </div>
      </div><!-- /.captcha-container -->

      <div class="cf-section cf-wrapper">
        <div class="cf-columns two">
          <div class="cf-column">
            <h2 data-translate="why_captcha_headline">Why do I have to complete a CAPTCHA?</h2>
            
            <p data-translate="why_captcha_detail">Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.</p>
          </div>

          <div class="cf-column">
            <h2 data-translate="resolve_captcha_headline">What can I do to prevent this in the future?</h2>
            

            <p data-translate="resolve_captcha_antivirus">If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.</p>

            <p data-translate="resolve_captcha_network">If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.</p>
            
            <p data-translate="resolve_captcha_privacy_pass">Another way to prevent getting this page in the future is to use Privacy Pass. Check out the browser extension in the <a href="https://addons.mozilla.org/en-US/firefox/addon/privacy-pass/">Firefox Add-ons Store</a>.</p>
            
          </div>
        </div>
      </div><!-- /.section -->
      

      <div class="cf-error-footer cf-wrapper">
  <p>
    <span class="cf-footer-item">Cloudflare Ray ID: <strong>3e919bd9b1a12b46</strong></span>
    <span class="cf-footer-separator">&bull;</span>
    <span class="cf-footer-item"><span data-translate="your_ip">Your IP</span>: 100.55.143.26</span>
    <span class="cf-footer-separator">&bull;</span>
    <span class="cf-footer-item"><span data-translate="performance_security_by">Performance &amp; security by</span> <a data-orig-proto="https" data-orig-ref="www.cloudflare.com/5xx-error-landing?utm_source=error_footer" id="brand_link" target="_blank">Cloudflare</a></span>
    
  </p>
</div><!-- /.error-footer -->


    </div><!-- /#cf-error-details -->
  </div><!-- /#cf-wrapper -->

  <script type="text/javascript">
  window._cf_translation = {};
  
  
</script>

</body>
</html>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.