private async Task PostCaptchable(Dictionary <string, string> urlEncodedData, string uri) { if (!urlEncodedData.ContainsKey("api_type")) { urlEncodedData.Add("api_type", "json"); } if (!String.IsNullOrEmpty(CaptchaIden)) { if (urlEncodedData.ContainsKey("iden")) { urlEncodedData["iden"] = CaptchaIden; } else { urlEncodedData.Add("iden", CaptchaIden); } } if (!String.IsNullOrEmpty(Captcha)) { if (urlEncodedData.ContainsKey("captcha")) { urlEncodedData["captcha"] = Captcha; } else { urlEncodedData.Add("captcha", Captcha); } } await EnsureRedditCookie(); HttpResponseMessage response = null; do { try { await ThrottleRequests(); response = await _httpClient.PostAsync(uri, new FormUrlEncodedContent(urlEncodedData)); } catch (WebException ex) { //connection problems during a post, so put it into the deferalSink if (ex.Status == WebExceptionStatus.ConnectFailure || ex.Status == WebExceptionStatus.SendFailure) { _deferalSink.Defer(urlEncodedData, uri); return; } else { throw; } } }while(response != null && await HandleCaptchaError(response)); }
private async Task <string> PostCaptchable(Dictionary <string, string> urlEncodedData, string uri, CancellationToken token) { if (!urlEncodedData.ContainsKey("api_type")) { urlEncodedData.Add("api_type", "json"); } if (!String.IsNullOrEmpty(CaptchaIden)) { if (urlEncodedData.ContainsKey("iden")) { urlEncodedData["iden"] = CaptchaIden; } else { urlEncodedData.Add("iden", CaptchaIden); } } if (!String.IsNullOrEmpty(Captcha)) { if (urlEncodedData.ContainsKey("captcha")) { urlEncodedData["captcha"] = Captcha; } else { urlEncodedData.Add("captcha", Captcha); } } string responseString = null; do { try { responseString = await _networkLayer.Post(uri, token, urlEncodedData, null); } catch (WebException ex) { //connection problems during a post, so put it into the deferalSink if (ex.Status == WebExceptionStatus.ConnectFailure || ex.Status == WebExceptionStatus.SendFailure) { _deferalSink.Defer(urlEncodedData, uri, "Post"); return(null); } else { throw; } } }while(await HandleCaptchaError(responseString)); return(responseString); }