NET发送POST请求

怎样通过HttpWebRequest 发送 POST 请求到一个网页服务器?例如编写个程序实现自动用户登录,自动提交表单数据到网站等。 假如某个页面有个如下的表单(Form):

<form name="form1" action="http://www.breakn.com/login.asp" method="post"> <input type="text" name="userid" value=""> <input type="password" name="password" value=""> </form>

从表单可看到表单有两个表单域,一个是userid另一个是password,所以以POST形式提交的数据应该包含有这两项。 其中POST的数据格式为: 表单域名称1=值1&表单域名称2=值2&表单域名称3=值3…… 要注意的是“值”必须是经过HTMLEncode的,即不能包含“<>=&”这些符号。

本例子要提交的数据应该是: userid=value1&password=value2

用C#写提交程序: string strId = "guest"; string strPassword= "123456";

ASCIIEncoding encoding=new ASCIIEncoding(); string postData="userid="+strId; postData += ("&password="+strPassword);

byte[] data = encoding.GetBytes(postData);

// Prepare web request HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://www.here.com/login.asp");

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();

// Get response HttpWebResponse myResponse=(HttpWebResponse)myRequest.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.Default); string content = reader.ReadToEnd(); Response.Write(content);

 

static string PostDataToUrl(byte[] data, string url)         {             #region 创建httpWebRequest对象             WebRequest webRequest = WebRequest.Create(url);             HttpWebRequest httpRequest = webRequest as HttpWebRequest;             if (httpRequest == null)             {                 throw new ApplicationException(                     string.Format("Invalid url string: {0}", url)                     );             }             #endregion                #region 填充httpWebRequest的基本信息             httpRequest.UserAgent = sUserAgent;             httpRequest.ContentType = sContentType;             httpRequest.Method = "POST";             #endregion                #region 填充要post的内容             httpRequest.ContentLength = data.Length;             Stream requestStream = httpRequest.GetRequestStream();             requestStream.Write(data, 0, data.Length);             requestStream.Close();             #endregion                #region 发送post请求到服务器并读取服务器返回信息             Stream responseStream;             try             {                 responseStream = httpRequest.GetResponse().GetResponseStream();             }             catch(Exception e)             {                 // log error                 Console.WriteLine(                     string.Format("POST操作发生异常:{0}", e.Message)                     );                 throw e;             }             #endregion                #region 读取服务器返回信息             string stringResponse = string.Empty;             using(StreamReader responseReader =                 new StreamReader(responseStream, Encoding.GetEncoding(sResponseEncoding)))             {                 stringResponse = responseReader.ReadToEnd();             }             responseStream.Close();             #endregion             return stringResponse;         }            const string sUserAgent =             "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";         const string sContentType =             "application/x-www-form-urlencoded";         const string sRequestEncoding = "ascii";         const string sResponseEncoding = "gb2312";     }

posted @ 2013-07-27 22:05  mimo0  阅读(596)  评论(0)    收藏  举报