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. Microsoft .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 submit 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();
}
						
comments powered by Disqus

Blog Tags