`

使用 HttpWebRequest 向网站提交数据

阅读更多
HttpWebRequest 是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过 HTTP 协议和服务器交互。 

HttpWebRequest 对 HTTP 协议进行了完整的封装,对 HTTP 协议中的 Header, Content, Cookie 都做了属性和方法的支持,很容易就能编写出一个模拟浏览器自动登录的程序。 

程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成,下面对这两种方式进行一下说明: 

1. GET  方式。 GET 方式通过在网络地址附加参数来完成数据的提交,比如在地址 http://www.google.com/webhp?hl=zh- CN 中,前面部分 http://www.google.com/webhp 表示数据提交的网址,后面部分 hl=zh-CN 表示附加的参数,其中  hl 表示一个键(key), zh-CN 表示这个键对应的值(value)。程序代码如下: 

<!---->HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/webhp?hl=zh-CN" );
req.Method 
= "GET";
using (WebResponse wr = req.GetResponse())
{
   
//在这里对接收到的页面内容进行处理


2. POST 方式。 POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 GET 方式一样,是类似于 hl=zh-CN&newwindow=1 这样的结构。程序代码如下: 
<!---->
string param = "hl=zh-CN&newwindow=1";
byte[] bs = Encoding.ASCII.GetBytes(param);

HttpWebRequest req 
= (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/intl/zh-CN/" );
req.Method 
= "POST";
req.ContentType 
= "application/x-www-form-urlencoded";
req.ContentLength 
= bs.Length;

using (Stream reqStream = req.GetRequestStream())
{
   reqStream.Write(bs, 
0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
   
//在这里对接收到的页面内容进行处理


在上面的代码中,我们访问了 www.google.com 的网址,分别以 GET 和 POST 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站能够识别。 

3. 使用 GET 方式提交中文数据。 GET 方式通过在网络地址中附加参数来完成数据提交,对于中文的编码,常用的有 gb2312 和 utf8 两种,用 gb2312 方式编码访问的程序代码如下: 

<!---->Encoding myEncoding = Encoding.GetEncoding("gb2312");
string address  = "http://www.baidu.com/s?" + HttpUtility.UrlEncode("参数一", myEncoding) +  "=" + HttpUtility.UrlEncode("值一", myEncoding);
HttpWebRequest req 
= (HttpWebRequest)HttpWebRequest.Create(address);
req.Method 
= "GET";
using (WebResponse wr = req.GetResponse())
{
   
//在这里对接收到的页面内容进行处理


在 上面的程序代码中,我们以 GET 方式访问了网址 http://www.baidu.com/s ,传递了参数“参数一=值一”,由于无法告知对方提 交数据的编码类型,所以编码方式要以对方的网站为标准。常见的网站中, www.baidu.com (百度)的编码方式是 gb2312,  www.google.com (谷歌)的编码方式是 utf8。 

4. 使用 POST 方式提交中文数据。 POST 方式通过在页面内容中填写参数的方法来完成数据的提交,由于提交的参数中可以说明使用的编码方式,所以理论上能获得更大的兼容性。用 gb2312 方式编码访问的程序代码如下: 

<!---->Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param  = HttpUtility.UrlEncode("参数一", myEncoding) + "=" + HttpUtility.UrlEncode ("值一", myEncoding) + "&" + HttpUtility.UrlEncode("参数二", myEncoding)  + "=" + HttpUtility.UrlEncode("值二", myEncoding);

byte[] postBytes = Encoding.ASCII.GetBytes(param);

HttpWebRequest req 
= (HttpWebRequest) HttpWebRequest.Create( "http://www.baidu.com/s" );
req.Method 
= "POST";
req.ContentType 
= "application/x-www-form-urlencoded;charset=gb2312";
req.ContentLength 
= postBytes.Length;

using (Stream reqStream = req.GetRequestStream())
{
   reqStream.Write(
postBytes 0, postBytes .Length);
}
using (WebResponse wr = req.GetResponse())
{
   
//在这里对接收到的页面内容进行处理


从上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的 ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。 

以 上列出了客户端程序使用 HTTP 协议与服务器交互的情况,常用的是 GET 和 POST 方式。现在流行的 WebService 也是通过  HTTP 协议来交互的,使用的是 POST 方法。与以上稍有所不同的是, WebService 提交的数据内容和接收到的数据内容都是使用了  XML 方式编码。所以, HttpWebRequest 也可以使用在调用 WebService 的情况下。

dennis 2007-03-20 16:32 发表评论
分享到:
评论

相关推荐

    使用HttpWebRequest提交数据

    使用HttpWebRequest提交数据

    httpwebrequest抓取页面小工具

    使用Httpwebrequest抓取页面数据 主要用于post get数据之类的提交参数

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar

    C#的wpf客户端使用HttpWebRequest模拟网页表单提交数据到Java的web服务端,Java服务端使用commons-fileupload.jar,Spring接受数据。 ********************************** *该程序可以同时提交表单数据和上传文件* ...

    .net通过HttpWebRequest模拟表单通过name/value形式提交参数和文件实例上传文件

    .net通过HttpWebRequest模拟表单...通过HttpWebRequest类模拟网页请求,可向服务端提交多参数和多文件数据,参数和文件已key、value的形式进行上传。已集成完整的类库,可直接调用。文件支持文件路径和byte两种形式。

    C#中HttpWebRequest的用法详解

    HttpWebRequest类主要利用HTTP 协议和服务器交互,通常是通过 GET 和 POST 两种方式来对数据进行获取和提交。下面对这两种方式进行一下说明: GET 方式: GET 方式通过在网络地址附加参数来完成数据的提交,比如在...

    服务器提交了协议冲突. Section=ResponseStatusLine解决方法

    用HttpWebrequest向服务器POST或GET数据时,有的时候或者有的机子会出现"服务器提交了协议冲突. Section=ResponseStatusLine"的错误,我用文档整理出来可用解决方法

    Unity 中通过UnityWebRequest POST传JSON格式的参数请求数据。

    Unity 中通过UnityWebRequest 以POST形式传JSON格式(键值对格式)的参数请求数据。

    Asp.Net模拟表单提交数据和上传文件的实现代码

    此时需要在自己的网站做一个动态页作为代理,将表单提交到动态页,动态页负责将表单的内容使用WebClient或HttpWebRequest将表单数据再上传到远程服务器,由于在服务器端进行操作,就不存在跨域问题了。 WebClient...

    C#POST_GET表单提交

    /// /// HTTP POST方式请求数据. /// /// &lt;param name="url"&gt;URL. /// &lt;returns&gt;&lt;/returns&gt; public static string HttpPost(string ... { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

    winform程序向web页面交互

    HttpWebRequest类利用HTTP 协议和服务器交互,通过 GET 和 POST 两种方式来对数据进行获取和提交

    ASP.net技术内幕

    2.1.5 CheckBox和CheckBoxList控件 2.1.6 DropDownList控件 2.1.7 ListBox控件 2.2 控制页面导航 2.2.1 将表单提交到另一个页面 2.2.2 使用Redirect( )方法 2.2.3 使用HyperLink...

    asp.net技术内幕(1)

    2.2.1 将表单提交到另一个页面 2.2.2 使用Redirect( )方法 2.2.3 使用HyperLink控件 2.3 在控件上进行格式化 2.3.1 基本Web控件属性 2.3.2 在Web控件上应用样式 2.4 小结 &lt;br&gt;第3章...

    asp.net技术内幕(2)

    2.2.1 将表单提交到另一个页面 2.2.2 使用Redirect( )方法 2.2.3 使用HyperLink控件 2.3 在控件上进行格式化 2.3.1 基本Web控件属性 2.3.2 在Web控件上应用样式 2.4 小结 &lt;br&gt;第3章...

    asp.net技术内幕(5)

    2.2.1 将表单提交到另一个页面 2.2.2 使用Redirect( )方法 2.2.3 使用HyperLink控件 2.3 在控件上进行格式化 2.3.1 基本Web控件属性 2.3.2 在Web控件上应用样式 2.4 小结 &lt;br&gt;第3章...

    asp.net技术内幕(4)

    2.2.1 将表单提交到另一个页面 2.2.2 使用Redirect( )方法 2.2.3 使用HyperLink控件 2.3 在控件上进行格式化 2.3.1 基本Web控件属性 2.3.2 在Web控件上应用样式 2.4 小结 &lt;br&gt;第3章...

    asp.net技术内幕(3)

    2.2.1 将表单提交到另一个页面 2.2.2 使用Redirect( )方法 2.2.3 使用HyperLink控件 2.3 在控件上进行格式化 2.3.1 基本Web控件属性 2.3.2 在Web控件上应用样式 2.4 小结 &lt;br&gt;第3章...

    asp.net c#采集需要登录页面的实现原理及代码

    首先说明:代码片段是从网络获取,然后自己修改。我想好的东西应该拿来分享。...我们所要做的仅仅是在采集的时候(或者说HttpWebRequest提交数据的时候),将Cookie信息放入Http请求头里面就可以了。 在

    Scrap-of-LiteCoin:抓取litecoin值并将其存储到MySQL数据库的应用程序

    零碎硬币抓取litecoin值并将其存储到MySQL数据库的应用程序使用HtmlAgilityPack对象,可以使用node方法从给定网站读取数据。 读取的数据通过System.Net.HttpWebRequest发送,并且post方法发送到velja.php文件,稍后...

    远程获取以及操作网页源码(C#),socket通信

    通过URL获取网页数据或则按钮提交操作,SOCKET通信,基于事件的发送接收消息。直接调用Client或是Server即可,里面有注释,其他类可忽略。

Global site tag (gtag.js) - Google Analytics