public async Task<Tuple<string, Dictionary<string, string>>> SendPostForCookies(Dictionary<string, string> urlEncodedData, string uri)
{
//limit requests to once every 500 milliseconds
await ThrottleRequests();
StringBuilder dataBuilder = new StringBuilder();
var stringData = string.Join("&", urlEncodedData.Select(kvp => string.Format("{0}={1}", kvp.Key, kvp.Value)));
byte[] data = Encoding.UTF8.GetBytes(stringData);
HttpWebRequest request = HttpWebRequest.CreateHttp(uri);
request.AllowReadStreamBuffering = true;
request.Method = "POST";
request.UserAgent = "Baconography_Windows_Phone_8_Client/1.0";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
var container = new CookieContainer();
request.CookieContainer = container;
//request.CookieContainer.Add(new Uri("http://www.reddit.com", UriKind.Absolute), new Cookie("reddit_session", "", "/", "reddit.com"));
using (var requestStream = (await GetRequestStreamAsync(request))) { requestStream.Write(data, 0, data.Length); }
var postResult = await GetResponseAsync(request);
if (postResult.StatusCode == HttpStatusCode.OK)
{
var jsonResult = await (new StreamReader(postResult.GetResponseStream()).ReadToEndAsync());
container.GetCookies(new Uri("http://www.reddit.com", UriKind.Absolute));
string loginCookie = "";
var loginResultThing = JsonConvert.DeserializeObject<LoginJsonThing>(jsonResult);
if (loginResultThing != null && loginResultThing.Json != null &&
(loginResultThing.Json.Errors == null || loginResultThing.Json.Errors.Length == 0))
{
loginCookie = HttpUtility.UrlEncode(loginResultThing.Json.Data.Cookie);
}
if (!String.IsNullOrEmpty(loginCookie))
return Tuple.Create(jsonResult, new Dictionary<string, string> { { "reddit_session", loginCookie } });
else
return Tuple.Create<string, Dictionary<string, string>>(jsonResult, null);
}
else
throw new Exception(postResult.StatusCode.ToString());
}