C# HttpWebRequest实现http Get和Post请求

在C#中用来提取网页Html的组件比较多,常用的用WebBrowser、WebClient、HttpWebRequest这三个。下面简单介绍以下HttpWebRequest实现Get和Post请求。

Http post code demo:

public string HttpPost(string postUrl, string paramData, Encoding dataEncode)
{
    string result = string.Empty;

    //Define a HttpWebRequest object
    HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
    webReq.Method="POST";
    webReq.ContentType="application/x-www-form-urlencoded";

    //先将post的参数写入HttpWebRequest
    byte[] byteArray = dataEncode.GetBytes(paramData);
    webReq.ContentLength = byteArray.Length;
    Stream newStream = webReq.GetRequestStream();
    newStream.Write(byteArray, 0, byteArray.Length);
    newStream.Close();

    //提交Post请求,并获取数据
    HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
    StreamReader sReader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    result = sReader.ReadToEnd();
    sReader.Close();
    response.Close();
    newStream.Close();

    return result;
}

Http Get code demo:

public string HttpGet(string getUrl, string paramData, Encoding dataEncode)
{
    string result = string.Empty;
    
    HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(getUrl +"?"+ paramData));
    webReq.Method = "GET";
    webReq.ContentType = "text/html";

    HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
    StreamReader sReader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    result = sReader.ReadToEnd();
    sReader.Close();
    response.Close();

    return result;
}
Advertisements

Asp.net – get和post

在向网站提交表单时有get和post两种方式。下面谈谈在Asp.net中这两种提交方法。

区别
1、get是从服务器获取数据。post是像服务器传递数据。
2、get把参数数据队列加到提交表单的Action属性所指的Url中,值和表单内各个字段一一对应,在Url中可以看到。post是通过Http Post机制,将表单内各个字段与其内容放置在Html Header内一起传送到Action属性所指的Url地址,用户看不到提交过程。
3、get方法,服务器端用Request.QueryString获得变量的值。post方法,服务器端用Request.Form获得提交的数据。
4、get传送的数据量小,不能大于2KB。post传送的数据量较大,一般默认为不受限制。
5、get安全性非常低。post安全性较高。但是get的执行效率比post好。

使用建议
1、get方式安全性较post方式安全性要差些。如果包含机密信息,建议使用post数据提交方式。
2、在做数据查询的时候,使用get方式。在做数据添加、修改或删除时,建议用post方式。

代码示例

1、Get提交代码

<form id="getform" method="get" runat="server">
  <div>
    <p>Get方式提交表单</p>
    <p>名字<asp:TextBox ID="name" runat="server"></asp:TextBox></p>
    <p>网站<asp:TextBox ID="website" runat="server"></asp:TextBox></p>
    <p><asp:Button ID="Button" runat="server" Text="提交"/></p>
  </div>
</form>

后台代码

string name= Request.QueryString["name"];//name 表示里面TextBox的ID
string website=Request.QueryString["website"];

2、post提交代码

<form id="getform" method="post" runat="server">
  <div>
    <p>post方式提交表单</p>
    <p>名字<asp:TextBox ID="name1" runat="server"></asp:TextBox></p>
    <p>网站<asp:TextBox ID="website1" runat="server"></asp:TextBox></p>
    <p><asp:Button ID="Button" runat="server" Text="提交"/></p>
  </div>
</form>

后台代码

string name= Request.Form["name1"];//name 表示里面TextBox的ID
string website=Request.Form["website1"];

3、后台同时接受get和post方法传送数据的代码

string name= Request.Params["name"];
string website= Request.Params["website"];

或者

string name= Request["name"];
string website= Request["website"];

Request.QueryString、 Request.Form 、Request.Params、Request区别

1、Request.Form:获取以POST方式提交的数据(接收Form提交来的数据)。
2、Request.QueryString:获取地址栏参数(以GET方式提交的数据)。
3、Request:包含以上两种方式(优先获取 GET方式提交的数据),它会在QueryString、Form、ServerVariable中都按先后顺序搜寻一遍。而且有时候也会得到不同的结 果。如果你仅仅是需要Form中的一个数据,但是你使用了Request而不是Request.Form,那么程序将在QueryString、 ServerVariable中也搜寻一遍。如果正好你的QueryString或者ServerVariable里面也有同名的项,你得到的就不是你原 本想要的值了。
4、Request.Params是所有post和get传过来的值的集合,request.params其实是一个集合,它依次包括 request.QueryString、request.Form、request.cookies和request.ServerVariable。

注意
asp.net默认是post form,但是只是自己post自己,不能post到其他页面。
如果想要提交到其他页面,把 runat=”server” 去掉,使用submit提交,使用Requst.Form可以取值