Ejemplo n.º 1
0
        private void InjectCookies(HttpRequestMessage request, YetAnotherCloudProxyResponse YetAnotherCloudProxyResponse)
        {
            var rCookies = YetAnotherCloudProxyResponse.Solution.Cookies;

            if (!rCookies.Any())
            {
                return;
            }
            var rCookiesList = rCookies.Select(x => x.Name).ToList();

            if (HttpClientHandler.UseCookies)
            {
                var oldCookies = HttpClientHandler.CookieContainer.GetCookies(request.RequestUri);
                foreach (Cookie oldCookie in oldCookies)
                {
                    if (rCookiesList.Contains(oldCookie.Name))
                    {
                        oldCookie.Expired = true;
                    }
                }
                foreach (var rCookie in rCookies)
                {
                    HttpClientHandler.CookieContainer.Add(request.RequestUri, rCookie.ToCookieObj());
                }
            }
            else
            {
                foreach (var rCookie in rCookies)
                {
                    request.Headers.Add(HttpHeaders.Cookie, rCookie.ToHeaderValue());
                }
            }
        }
Ejemplo n.º 2
0
        private void InjectSetCookieHeader(HttpResponseMessage response, YetAnotherCloudProxyResponse YetAnotherCloudProxyResponse)
        {
            var rCookies = YetAnotherCloudProxyResponse.Solution.Cookies;

            if (!rCookies.Any())
            {
                return;
            }

            // inject set-cookie headers in the response
            foreach (var rCookie in rCookies)
            {
                response.Headers.Add(HttpHeaders.SetCookie, rCookie.ToHeaderValue());
            }
        }
        public async Task <YetAnotherCloudProxyResponse> Solve(HttpRequestMessage request)
        {
            YetAnotherCloudProxyResponse result = null;

            await Locker.LockAsync(async() =>
            {
                HttpResponseMessage response;
                try
                {
                    _httpClient = new HttpClient();
                    response    = await _httpClient.PostAsync(_YetAnotherCloudProxyUri, GenerateYetAnotherCloudProxyRequest(request));
                }
                catch (HttpRequestException e)
                {
                    throw new YetAnotherCloudProxyException("Error connecting to CloudProxy server: " + e);
                }
                catch (Exception e)
                {
                    throw new YetAnotherCloudProxyException("Exception: " + e.ToString());
                }
                finally
                {
                    _httpClient.Dispose();
                }

                // Don't try parsing if CloudProxy hasn't resturned 200 or 500
                if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.InternalServerError)
                {
                    throw new YetAnotherCloudProxyException("HTTP StatusCode not 200 or 500. Status is :" + response.StatusCode);
                }

                var resContent = await response.Content.ReadAsStringAsync();
                try
                {
                    result = JsonConvert.DeserializeObject <YetAnotherCloudProxyResponse>(resContent);
                }
                catch (Exception)
                {
                    throw new YetAnotherCloudProxyException("Error parsing response, check CloudProxy. Response: " + resContent);
                }

                try
                {
                    Enum.TryParse(result.Status, true, out CloudProxyStatusCode returnStatusCode);

                    if (returnStatusCode.Equals(CloudProxyStatusCode.ok))
                    {
                        return(result);
                    }
                    else if (returnStatusCode.Equals(CloudProxyStatusCode.warning))
                    {
                        throw new YetAnotherCloudProxyException(
                            "CloudProxy was able to process the request, but a captcha was detected. Message: "
                            + result.Message);
                    }
                    else if (returnStatusCode.Equals(CloudProxyStatusCode.error))
                    {
                        throw new YetAnotherCloudProxyException(
                            "CloudProxy was unable to process the request, please check CloudProxy's logs. Message: "
                            + result.Message);
                    }
                    else
                    {
                        throw new YetAnotherCloudProxyException("Unable to map CloudProxy returned status code, received code: "
                                                                + result.Status + ". Message: " + result.Message);
                    }
                }
                catch (ArgumentException)
                {
                    throw new YetAnotherCloudProxyException("Error parsing status code, check CloudProxy log. Status: "
                                                            + result.Status + ". Message: " + result.Message);
                }
            });

            return(result);
        }