My credit card company is a bit lazy. In this age of IT revolution its normal to receive info and not to ask for it. In order to get my credit card account balance I need to access my online account.
This sucks.
I wanted to receive my credit card balance in email on a regular timely base. But credit card company does not allow for this. It's not like they want me to be aware of it :)
Challenge was how to do POST from windows service on HTTPS url.
Simple sniffing of POST from browser got me details for POST data.
After a bit of google-ing I came up with this.
You know that stupid feeling when you write a bit complex stuff and it works on a first try.
One must admire guys from Microsoft in doing good job.
Observe what complexity is hidden in just few lines - negotiating HTTPS protocol, handling in and out of cookies.
Cool...
Here is the code that makes actual HTTPS POST:
var postData = "j_username=xxxxxx&j_password=xxxxxx&Submit=continue"; ASCIIEncoding encoding = new ASCIIEncoding(); byte[] postByteArray = encoding.GetBytes(postData); var response = new List(); Uri myuri = new Uri(MYURL); var cookieContainer = new CookieContainer(); //.NET client to accept all certificates ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(myuri); webRequest.CookieContainer = cookieContainer; webRequest.Method = "POST"; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.ContentLength = postByteArray.Length; var requestStream = webRequest.GetRequestStream(); requestStream.Write(postByteArray, 0, postByteArray.Length); requestStream.Close(); HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); using (Stream resStream = webResponse.GetResponseStream()) { StreamReader reader = new StreamReader(resStream); string resline = ""; while (resline != null) { resline = reader.ReadLine(); response.Add(resline); } reader.Close(); resStream.Close(); } return response.ToArray();
No comments:
Post a Comment