Search
Close this search box.

Http Post in C#

Searched out on the internet and didn ‘t really find anything that was horribly succinct, so I wrote this class for fun. I had help from http://www.codeproject.com/cs/webservices/translation.asp. I hope you enjoy! Here’ s the code to call it :

PostSubmitter post = new PostSubmitter();

post.Url=”http://seeker.dice.com/jobsearch/servlet/JobSearch
post.PostItems.Add(“op”,”100
post.PostItems.Add(“rel_code”,”1102
post.PostItems.Add(“FREE_TEXT”,”c
post.PostItems.Add(“SEARCH;
post.Type=PostSubmitter.PostTypeEnum.Post;
string result=post.Post();

And here’s the class:

using System;
using System.Text;
using System.IO;
using System.Web;
using System.Net;
using System.Collections.Specialized;

namespace Snowball.Common
{
/// /// Submits post data to a url. ///
public
class PostSubmitter {
/// /// determines what type of post to perform. ///
public
enum PostTypeEnum {
/// /// Does a get against the source. ///
Get,
/// /// Does a post against the source. ///
Post
}

private string m_url = string.Empty;

private
NameValueCollection m_values = new NameValueCollection();
private
PostTypeEnum m_type = PostTypeEnum.Get;
/// /// Default constructor. ///
public
PostSubmitter() {}

/// <summary>
/// Constructor that accepts a url as a parameter
/// </summary>
/// <param name="url">The url where the post will be submitted to.</param>

public
PostSubmitter(string url) : this() { m_url = url; }

/// <summary>
/// Constructor allowing the setting of the url and items to post.
/// </summary>
/// <param name="url">the url for the post.</param>
/// <param name="values">The values for the post.</param>

public
PostSubmitter(string url, NameValueCollection values) : this(url) {
m_values = values;
}

/// <summary>
/// Gets or sets the url to submit the post to.
/// </summary>

public
string Url {
get { return m_url; }
set { m_url = value; }
}
/// /// Gets or sets the name value collection of items to post. ///
public
NameValueCollection PostItems {
get { return m_values; }
set { m_values = value; }
}
/// /// Gets or sets the type of action to perform against the url. ///
public
PostTypeEnum Type {
get { return m_type; }
set { m_type = value; }
}
/// /// Posts the supplied data to specified url. ///
/// a string containing the result of the post.
public
string Post() {
StringBuilder parameters = new StringBuilder();
for (int i = 0; i < m_values.Count; i++) {
EncodeAndAddItem(ref parameters, m_values.GetKey(i), m_values[i]);
}
string result = PostData(m_url, parameters.ToString());
return result;
}
/// /// Posts the supplied data to specified url. ///
/// The url to post to.
/// a string containing the result of the post.
public
string Post(string url) {
m_url = url;
return this.Post();
}
/// /// Posts the supplied data to specified url. ///
/// The url to post to.
/// The values to post.
/// a string containing the result of the post.
public
string Post(string url, NameValueCollection values) {
m_values = values;
return this.Post(url);
}
/// /// Posts data to a specified url. Note that this assumes that you have /// already url encoded the post data. ///
/// The data to post.
/// the url to post to.
/// Returns the result of the post.
private
string PostData(string url, string postData) {
HttpWebRequest request = null;
if (m_type == PostTypeEnum.Post) {
Uri uri = new Uri(url);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = “POST”;
request.ContentType = “application/x-www-form-urlencoded”;
request.ContentLength = postData.Length;
using(Stream writeStream = request.GetRequestStream()) {
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(postData);
writeStream.Write(bytes, 0, bytes.Length);
}
} else {
Uri uri = new Uri(url + “?” + postData);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = “GET”;
}
string result = string.Empty;
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
using(Stream responseStream = response.GetResponseStream()) {
using(StreamReader readStream =
new StreamReader(responseStream, Encoding.UTF8)) {
result = readStream.ReadToEnd();
}
}
}
return result;
}
/// /// Encodes an item and ads it to the string. ///
/// The previously encoded data.
/// The data to encode.
/// A string containing the old data and the previously encoded /// data.
private
void EncodeAndAddItem(ref StringBuilder baseRequest, string key,
string dataItem) {
if (baseRequest == null) {
baseRequest = new StringBuilder();
}
if (baseRequest.Length != 0) {
baseRequest.Append(“&”);
}
baseRequest.Append(key);
baseRequest.Append(“=”);
baseRequest.Append(System.Web.HttpUtility.UrlEncode(dataItem));
}
}
}

This article is part of the GWB Archives. Original Author: ROBERT MAY

Related Posts