Esempio n. 1
0
        private async Task PassClearance(HttpResponseMessage response, CancellationToken cancellationToken)
        {
            SaveIdCookie(response);

            var pageContent = await response.Content.ReadAsStringAsync();            //CloudFlare页面获得

            var scheme   = response.RequestMessage.RequestUri.Scheme;                //https
            var host     = response.RequestMessage.RequestUri.Host;                  //suicibei.nyaa.si
            var port     = response.RequestMessage.RequestUri.Port;                  //443
            var solution = ChallengeSolver.Solve(pageContent, host);                 //获得验证信息

            var clearanceUri = $"{scheme}://{host}:{port}{solution.ClearanceQuery}"; //验证完毕

            await Task.Delay(5000, cancellationToken);                               //等待5S

            var clearanceRequest = new HttpRequestMessage(HttpMethod.Get, clearanceUri);

            IEnumerable <string> userAgent;

            if (response.RequestMessage.Headers.TryGetValues(HttpHeader.UserAgent, out userAgent))
            {
                clearanceRequest.Headers.Add(HttpHeader.UserAgent, userAgent);
            }

            await _client.SendAsync(clearanceRequest, cancellationToken);//得到答案后再一次获得。
        }
Esempio n. 2
0
        private async Task PassClearance(HttpResponseMessage response, CancellationToken cancellationToken)
        {
            SaveIdCookie(response);

            var pageContent = await response.Content.ReadAsStringAsync();

            var scheme   = response.RequestMessage.RequestUri.Scheme;
            var host     = response.RequestMessage.RequestUri.Host;
            var port     = response.RequestMessage.RequestUri.Port;
            var solution = ChallengeSolver.Solve(pageContent, host);

            var clearanceUri = $"{scheme}://{host}:{port}{solution.ClearanceQuery}";

            await Task.Delay(5000, cancellationToken);

            var clearanceRequest = new HttpRequestMessage(HttpMethod.Get, clearanceUri);

            IEnumerable <string> userAgent;

            if (response.RequestMessage.Headers.TryGetValues(HttpHeader.UserAgent, out userAgent))
            {
                clearanceRequest.Headers.Add(HttpHeader.UserAgent, userAgent);
            }

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

            SaveIdCookie(passResponse); // new ID might be set as a response to the challenge in some cases
        }
        private async Task PassClearance(HttpResponseMessage response, CancellationToken cancellationToken)
        {
            SaveIdCookie(response);

            var pageContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            var scheme   = response.RequestMessage.RequestUri.Scheme;
            var host     = response.RequestMessage.RequestUri.Host;
            var port     = response.RequestMessage.RequestUri.Port;
            var solution = ChallengeSolver.Solve(pageContent, host);

            var clearanceUri = $"{scheme}://{host}:{port}{solution.ClearanceQuery}";

            await Task.Delay(ClearanceDelay, cancellationToken).ConfigureAwait(false);

            var clearanceRequest = new HttpRequestMessage(HttpMethod.Get, clearanceUri);

            if (response.RequestMessage.Headers.TryGetValues(HttpHeader.UserAgent, out var userAgent))
            {
                clearanceRequest.Headers.Add(HttpHeader.UserAgent, userAgent);
            }

            if (response.RequestMessage.RequestUri != null)
            {
                clearanceRequest.Headers.Add("Referer", response.RequestMessage.RequestUri.ToString());
            }

            clearanceRequest.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
            clearanceRequest.Headers.Add("Upgrade-Insecure-Requests", "1");

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

            SaveIdCookie(passResponse);             // new ID might be set as a response to the challenge in some cases
        }