Uri url = new Uri("http://app/templat"); HttpWebRequest request = null; // Uncomment the line below only if you need to accept an invalid certificate, i.e. a self-signed cert for testing. // ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); CookieContainer cookieJar = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(url); request.CookieContainer = cookieJar; request.Method = "GET"; HttpStatusCode responseStatus; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { responseStatus = response.StatusCode; url = request.Address; } if (responseStatus == HttpStatusCode.OK) { UriBuilder urlBuilder = new UriBuilder(url); urlBuilder.Path = urlBuilder.Path.Remove(urlBuilder.Path.LastIndexOf('/')) + "/j_security_check"; request = (HttpWebRequest)WebRequest.Create(urlBuilder.ToString()); request.Referer = url.ToString(); request.CookieContainer = cookieJar; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (Stream requestStream = request.GetRequestStream()) using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII)) { string postData = "j_username=user&j_password=user&submit=Send"; requestWriter.Write(postData); } string responseContent = null; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader responseReader = new StreamReader(responseStream)) { responseContent = responseReader.ReadToEnd(); } Console.WriteLine(responseContent); } else { Console.WriteLine("Client was unable to connect!"); } Uri url = new Uri("http://app/templat"); HttpWebRequest request = null; ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); CookieContainer cookieJar = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(url); request.CookieContainer = cookieJar; request.Method = "GET"; HttpStatusCode responseStatus; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { responseStatus = response.StatusCode; url = request.Address; } if (responseStatus == HttpStatusCode.OK) { UriBuilder urlBuilder = new UriBuilder(url); urlBuilder.Path = urlBuilder.Path.Remove(urlBuilder.Path.LastIndexOf('/')) + "/j_security_check"; request = (HttpWebRequest)WebRequest.Create(urlBuilder.ToString()); request.Referer = url.ToString(); request.CookieContainer = cookieJar; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (Stream requestStream = request.GetRequestStream()) using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII)) { string postData = "j_username=user&j_password=user&submit=Send"; requestWriter.Write(postData); } string responseContent = null; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader responseReader = new StreamReader(responseStream)) { responseContent = responseReader.ReadToEnd(); } Console.WriteLine(responseContent); } else { Console.WriteLine("Client was unable to connect!"); } Uri url = new Uri("http://app/templat"); HttpWebRequest request = null; // Uncomment the line below only if you need to accept an invalid certificate, i.e. a self-signed cert for testing. // ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); CookieContainer cookieJar = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(url); request.CookieContainer = cookieJar; request.Method = "GET"; HttpStatusCode responseStatus; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { responseStatus = response.StatusCode; url = request.Address; } if (responseStatus == HttpStatusCode.OK) { UriBuilder urlBuilder = new UriBuilder(url); urlBuilder.Path = urlBuilder.Path.Remove(urlBuilder.Path.LastIndexOf('/')) + "/j_security_check"; request = (HttpWebRequest)WebRequest.Create(urlBuilder.ToString()); request.Referer = url.ToString(); request.CookieContainer = cookieJar; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (Stream requestStream = request.GetRequestStream()) using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII)) { string postData = "j_username=user&j_password=user&submit=Send"; requestWriter.Write(postData); } string responseContent = null; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader responseReader = new StreamReader(responseStream)) { responseContent = responseReader.ReadToEnd(); } Console.WriteLine(responseContent); } else { Console.WriteLine("Client was unable to connect!"); } Your code has the following problems that I can see:
- Doesn't properly handle the cookie container. CookieContainer should be initialized and then passed to your HttpWebRequest, not the other way around.
- Does not cleanup disposable objects. Failing to dispose an object can result in the object hanging around for quite a while before the garbage collector catches up with it.
- Does not account for the form action. Your form action will cause a submit to a different location.
- Unnecessarily performs the first operation as a POST. Use GET instead.
- Does not set the referer when performing the POST operation.
Try the following code:
Uri url = new Uri("http://app/templat"); HttpWebRequest request = null; ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); CookieContainer cookieJar = new CookieContainer(); request = (HttpWebRequest)WebRequest.Create(url); request.CookieContainer = cookieJar; request.Method = "GET"; HttpStatusCode responseStatus; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { responseStatus = response.StatusCode; url = request.Address; } if (responseStatus == HttpStatusCode.OK) { UriBuilder urlBuilder = new UriBuilder(url); urlBuilder.Path = urlBuilder.Path.Remove(urlBuilder.Path.LastIndexOf('/')) + "/j_security_check"; request = (HttpWebRequest)WebRequest.Create(urlBuilder.ToString()); request.Referer = url.ToString(); request.CookieContainer = cookieJar; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (Stream requestStream = request.GetRequestStream()) using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII)) { string postData = "j_username=user&j_password=user&submit=Send"; requestWriter.Write(postData); } string responseContent = null; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader responseReader = new StreamReader(responseStream)) { responseContent = responseReader.ReadToEnd(); } Console.WriteLine(responseContent); } else { Console.WriteLine("Client was unable to connect!"); } lang-cs