M
Matt H.
I am having a problem with a HTTPWebrequest that I am posting to a
third party server. This is an ecommerce scenario where someone is
retrieving their bill information from our server and then we are
passing them off to a third party to collect the payment.
On our server they are in an HTTPS state, and we are passing them off
to another HTTPS location.
The problem is that if i connect to our server, retireve my
information and then get passed off to the thirdy party server it will
work the first time (most of the time). However if I were to click
the back button (or cancel on the screen) and go back to view my
information and then get passed off to the third party again I will
get "The operation has timed out". Running some more tests, I
determined I am getting a "System.Net.WebException"
I have found some possible solutions and tried some, but none have
worked. I am not even sure if the issue is on my end as the third
party is being a little slow in helping with this issue.
code that does the post is below, hoping someone sees something.
Thanks
private static void start_post(string strPage, string strBuffer,
string auth_user, string auth_pass)
{
//HttpContext.Current.Response.Write(strPage + "<br>");
//HttpContext.Current.Response.Write(strBuffer + "<br>");
//Our postvars
byte[] buffer = Encoding.ASCII.GetBytes(strBuffer);
//Initialisation
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create
(strPage);
string auth = auth_user + ":" + auth_pass;
byte[] authBytes = Encoding.UTF8.GetBytes(auth.ToCharArray());
//byte[] authBytes = Encoding.UTF8.GetBytes
("holmenm:IlpIhwN71".ToCharArray());
WebReq.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(authBytes);
//WebReq.Headers.Add("Authorization", "Basic
dG9tY2F0OnRvbWNhdA==");
//Our method is post, otherwise the buffer (postvars) would be
useless
WebReq.Method = "POST";
//We use form contentType, for the postvars.
WebReq.ContentType = "application/x-www-form-urlencoded";
//The length of the buffer (postvars) is used as
contentlength.
WebReq.ContentLength = buffer.Length;
//We open a stream for writing the postvars
Stream PostData = WebReq.GetRequestStream();
//Now we write, and afterwards, we close. Closing is always
important!
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
//Get the response handle, we have no true response yet!
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse
();
//Let's show some information about the response
HttpContext.Current.Response.Write(WebResp.StatusCode +
"<br>");
HttpContext.Current.Response.Write(WebResp.Server + "<br>");
//Now, we read the response (the string), and output it.
Stream Answer = WebResp.GetResponseStream();
StreamReader _Answer = new StreamReader(Answer);
HttpContext.Current.Response.Write(_Answer.ReadToEnd() +
"<br>");
Answer.Close();
_Answer.Close();
WebResp.Close();
}
third party server. This is an ecommerce scenario where someone is
retrieving their bill information from our server and then we are
passing them off to a third party to collect the payment.
On our server they are in an HTTPS state, and we are passing them off
to another HTTPS location.
The problem is that if i connect to our server, retireve my
information and then get passed off to the thirdy party server it will
work the first time (most of the time). However if I were to click
the back button (or cancel on the screen) and go back to view my
information and then get passed off to the third party again I will
get "The operation has timed out". Running some more tests, I
determined I am getting a "System.Net.WebException"
I have found some possible solutions and tried some, but none have
worked. I am not even sure if the issue is on my end as the third
party is being a little slow in helping with this issue.
code that does the post is below, hoping someone sees something.
Thanks
private static void start_post(string strPage, string strBuffer,
string auth_user, string auth_pass)
{
//HttpContext.Current.Response.Write(strPage + "<br>");
//HttpContext.Current.Response.Write(strBuffer + "<br>");
//Our postvars
byte[] buffer = Encoding.ASCII.GetBytes(strBuffer);
//Initialisation
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create
(strPage);
string auth = auth_user + ":" + auth_pass;
byte[] authBytes = Encoding.UTF8.GetBytes(auth.ToCharArray());
//byte[] authBytes = Encoding.UTF8.GetBytes
("holmenm:IlpIhwN71".ToCharArray());
WebReq.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(authBytes);
//WebReq.Headers.Add("Authorization", "Basic
dG9tY2F0OnRvbWNhdA==");
//Our method is post, otherwise the buffer (postvars) would be
useless
WebReq.Method = "POST";
//We use form contentType, for the postvars.
WebReq.ContentType = "application/x-www-form-urlencoded";
//The length of the buffer (postvars) is used as
contentlength.
WebReq.ContentLength = buffer.Length;
//We open a stream for writing the postvars
Stream PostData = WebReq.GetRequestStream();
//Now we write, and afterwards, we close. Closing is always
important!
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
//Get the response handle, we have no true response yet!
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse
();
//Let's show some information about the response
HttpContext.Current.Response.Write(WebResp.StatusCode +
"<br>");
HttpContext.Current.Response.Write(WebResp.Server + "<br>");
//Now, we read the response (the string), and output it.
Stream Answer = WebResp.GetResponseStream();
StreamReader _Answer = new StreamReader(Answer);
HttpContext.Current.Response.Write(_Answer.ReadToEnd() +
"<br>");
Answer.Close();
_Answer.Close();
WebResp.Close();
}