`

使用 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)。程序代码如下:

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

2.POST方式。POST方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和GET方式一样,是类似于hl=zh-CN&newwindow=1这样的结构。程序代码如下:

stringparam="hl=zh-CN&newwindow=1";
byte[]bs=Encoding.ASCII.GetBytes(param);

HttpWebRequestreq=(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(StreamreqStream=req.GetRequestStream())
{
reqStream.Write(bs,0,bs.Length);
}
using(WebResponsewr=req.GetResponse())
{
//在这里对接收到的页面内容进行处理
}

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

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

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

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

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

EncodingmyEncoding=Encoding.GetEncoding("gb2312");
stringparam=HttpUtility.UrlEncode("参数一",myEncoding)+"="+HttpUtility.UrlEncode("值一",myEncoding)+"&"+HttpUtility.UrlEncode("参数二",myEncoding)+"="+HttpUtility.UrlEncode("值二",myEncoding);

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

HttpWebRequestreq=(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(StreamreqStream=req.GetRequestStream())
{
reqStream.Write(bs,0,bs.Length);
}
using(WebResponsewr=req.GetResponse())
{
//在这里对接收到的页面内容进行处理
}

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

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

分享到:
评论

相关推荐

    使用HttpWebRequest提交数据

    使用HttpWebRequest提交数据

    httpwebrequest抓取页面小工具

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

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

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

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

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

    C#中HttpWebRequest的用法详解

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

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

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

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

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

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

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

    C#POST_GET表单提交

    /// /// HTTP POST方式请求数据. /// /// <param name="url">URL. /// <returns></returns> 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 小结 <br>第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 小结 <br>第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 小结 <br>第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 小结 <br>第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 小结 <br>第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