|
How to use HttpWebRequest to send POST request to another web server?
In classic ASP applications we had the flexibility of having multiple form
tags on the same page and each form could have different target URLs and
different method types. This has been kind of a limiting factor in
ASP.Net applications. But this does not mean that it can not be accomplished.
Micorosoft .Net framework has a very rich library and provides answers to most
of the questions. It has a very handy HttpWebRequest class that
can be used to send HTTP requests to any server.
Where do I need to use it?
Its is important to know where this feature is required. A very good example is if you are using
Paypal
to accept payments for your e-commerce application. It requires that you set up your shopping cart
button to submit a POST request with all the required information. Following is an example from
Paypal's developer support web site.
<form name="_xclick" target="paypal"
action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="business" value="me@mybiz.com">
<input type="hidden" name="item_name" value="HTML book">
<input type="hidden" name="amount" value="24.99">
<input type="image" src="http://www.paypal.com/images/sc-but-01.gif"
border="0" name="submit" alt="Make payments with PayPal!">
<input type="hidden" name="add" value="1">
</form>
You can see that when you click on this button, a form will be submitted to paypal. The problem is that
ASP.Net does not allow embedding of second form tag inside the main form.
How will I do it?
We will gather all the required information from the user on a regular ASPX page. And then when user clicks
button to submitt information for shopping cart, then we will use HttpWebRequest object to
submit the request to target web server. The following illustrates how values from two text box controls
are sent to a target web server. This example does not correspond to the fields described in the Paypal
example.
private void OnPostInfoClick(object sender, System.EventArgs e)
{
string strId = UserId_TextBox.Text;
string strName = Name_TextBox.Text;
ASCIIEncoding encoding=new ASCIIEncoding();
string postData="userid="+strId;
postData += ("&username="+strName);
byte[] data = encoding.GetBytes(postData);
// Prepare web request...
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create("http://localhost/MyIdentity/Default.aspx");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
Stream newStream=myRequest.GetRequestStream();
// Send the data.
newStream.Write(data,0,data.Length);
newStream.Close();
}
If your server is capable of sending compressed response, read our article
How to use Accept-Encoding HTTP Header for more
details about it.
Another realted article about posting data to another web server and directing user to that site with it is
is posted here Post Request To Another Web Site With Redirection.
See also How to use HttpWebRequest to simulate Hotmail Login?
Netomatix team appreciates everybody's continued support and contribution to site.
Join The Effort
|