예제 #1
0
        protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
        {
            //Force l'UserAgent dans la requête si il n'est pas défini pour que Cloudflare accepte la requête
            if (request.Headers[HttpRequestHeader.UserAgent] == null)
            {
                (request as HttpWebRequest).UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0";
            }

            try
            {
                _response = base.GetWebResponse(request, result);
            }
            catch (WebException ex)
            {
                _response = ex.Response;
                HttpWebResponse error = (HttpWebResponse)_response;

                //Si l'exeption est du à l'erreur 503 de cloudflare
                if (CF_Interpreter.IsCloudflare(error))
                {
                    _response = BypassCloudflare((HttpWebRequest)request, error);
                }
                else
                {
                    throw ex;
                }
            }

            return(_response);
        }
예제 #2
0
        private WebResponse BypassCloudflare(HttpWebRequest request, HttpWebResponse response)
        {
            //Récupère le contenu de la page Clouflare
            string html = "";

            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                html = reader.ReadToEnd();
            }

            //Interprète le code native de cloudflare et nous retourne l'url de clearance
            string newurl = CF_Interpreter.Interpret(response.ResponseUri.AbsoluteUri, html);

            //Attendre 3 secondes minimum pour que cloudflare accepte l'url de clearrance
            Thread.Sleep(3000);

            //Récupère le cookies de clearance et redirige sur la page souhaité initialement avec l'autoredirection
            HttpWebRequest newWebRequest = (HttpWebRequest)WebRequest.Create(newurl);

            newWebRequest.AllowAutoRedirect = true;
            newWebRequest.CookieContainer   = CookieContainer;
            newWebRequest.Referer           = response.ResponseUri.AbsoluteUri;
            newWebRequest.UserAgent         = request.UserAgent;

            response = (HttpWebResponse)newWebRequest.GetResponse();

            return(response);
        }