Exemple #1
0
        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));
        }
Exemple #2
0
        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);
        }