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()); } } }
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); }