CookieContainer cookies = new CookieContainer();
List<FedACHDirectoryRecord> rnList = new List<FedACHDirectoryRecord>();
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ACHJobsConfig.FederalReserveBankDirectoryURL);
request.CookieContainer = cookies;
request.MaximumAutomaticRedirections = 4;
request.MaximumResponseHeadersLength = 4;
request.Credentials = CredentialCache.DefaultCredentials;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
string cookieName = string.Empty;
string cookieValue = string.Empty;
const char separator = '=';
foreach (WebHeaderCollection collection in request.Headers)
{
if (collection.ToString() == "Cookie")
{
string value = request.Headers["Cookie"].ToString();
string[] keyvalues = value.Split(separator);
if (keyvalues.Length > 1)
{
cookieName = keyvalues[0];
string removeStr = cookieName + separator.ToString();
cookieValue = value.Replace(removeStr, string.Empty);
break;
}
}
}
Cookie cookie = new Cookie();
cookie.Name = cookieName;
cookie.Value = cookieValue;
cookie.Domain = response.ResponseUri.Authority;
cookie.HttpOnly = true;
cookie.Secure = true;
cookies.Add(cookie);
string postData = "agreementValue=Agree";
string redirectedTo = response.ResponseUri.AbsoluteUri;
redirectedTo = redirectedTo.Substring(0, redirectedTo.LastIndexOf("/"));
redirectedTo = redirectedTo + "/submitAgreement.do";
HttpWebRequest formPostRequest = (HttpWebRequest)WebRequest.Create(redirectedTo);
formPostRequest.CookieContainer = cookies;
formPostRequest.Credentials = CredentialCache.DefaultCredentials;
formPostRequest.Method = WebRequestMethods.Http.Post;
formPostRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
formPostRequest.AllowWriteStreamBuffering = true;
formPostRequest.ProtocolVersion = HttpVersion.Version11;
formPostRequest.Referer = response.ResponseUri.AbsoluteUri;
formPostRequest.ContentType = "application/x-www-form-urlencoded";
byte[] byteArray = Encoding.ASCII.GetBytes(postData);
formPostRequest.ContentLength = byteArray.Length;
Stream newStream = formPostRequest.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);
newStream.Close();
using (HttpWebResponse formPostResponse = (HttpWebResponse)formPostRequest.GetResponse())
{
using (StreamReader readStream = new StreamReader(formPostResponse.GetResponseStream()))
{
string text = null;
while ((text = readStream.ReadLine()) != null)
{
FedACHDirectoryRecord rec = new FedACHDirectoryRecord(text);
rnList.Add(rec);
}
}
}
}