Skip to main content
AI Assist is now on Stack Overflow. Start a chat to get instant answers from across the network. Sign up to save and share your chats.
added 122 characters in body
Source Link
JamieSee
  • 13.1k
  • 2
  • 34
  • 48
 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!"); } 
Source Link
JamieSee
  • 13.1k
  • 2
  • 34
  • 48

Your code has the following problems that I can see:

  1. Doesn't properly handle the cookie container. CookieContainer should be initialized and then passed to your HttpWebRequest, not the other way around.
  2. 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.
  3. Does not account for the form action. Your form action will cause a submit to a different location.
  4. Unnecessarily performs the first operation as a POST. Use GET instead.
  5. 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!"); }