C#使用HttpWebRequest的POST方法发送大量数据的方法

使用 HttpWebRequest 向网站提交数据HttpWebRequest 是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过 HTTP 协议和服务器交互。 

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

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

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

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "" );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( "" );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()){   //在这里对接收到的页面内容进行处理} 

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

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

Encoding myEncoding = Encoding.GetEncoding("gb2312");string address = "" + HttpUtility.UrlEncode("参数一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding);HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);req.Method = "GET";using (WebResponse wr = req.GetResponse()){   //在这里对接收到的页面内容进行处理} 

在上面的程序代码中,我们以 GET 方式访问了网址  ,传递了参数“参数一=值一”,由于无法告知对方提交数据的编码类型,所以编码方式要以对方的网站为标准。常见的网站中,  (百度)的编码方式是 gb2312,  (谷歌)的编码方式是 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( "" );req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";req.ContentLength = postBytes.Length;

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

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

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

C#使用HttpWebRequest的POST方法发送大量数据的方法的相关文章

[Windows Phone 8开发]使用HttpWebRequest和HttpWebResponse向服务器发送Json数据(POST方法)

public string szJson = ""; byte[] json; UploadClass up = new UploadClass(); public ValidatePage() { InitializeComponent(); } private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { //我做了一个实现上传某些关键的Json数据,返回服务器Appid的功能,类似新浪微博

类型:Ajax;问题:ajax调用ashx参数获取不到;结果:ashx文件获取$.ajax()方法发送的数据

ashx文件获取$.ajax()方法发送的数据 今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是我在$.ajax方法中指明了"contentType: 'application/json; charset=utf8'",所以才导致了在ashx文件中处理请求时无法获取传递到服务器端的参数, 正确的写法如下: 1 $.ajax({ 2 url: '/Handler1.ashx?operF

ajax中获取和发送二进制数据的方法

来源:三联教程 | 时间:2013-06-08 17:51:48 用ajax从服务器端获取二进制时, 需要用overrideMimtType设置request头,让浏览器不要修改读取的的数据,方法如下: var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if (xhr.readyState=== 4 && xhr.status === 200){ var imgdata = xhr.response;

Servlet向客户端输出数据的方法

HttpServletResponse有两个向客户端回送数据的方法,一个是getWriter(),一个是GetOutputStream(),这两个方法都是用来向客户端发送响应数据的方法. getWriter()方法可以向客户端发送字符数据响应,getOutputStream()方法不仅可以发送字符(必须将字符转化为字节才可以使用该方法),而且可以发送字节数据也就是二进制数据,因此,在传送文件时,只能使用getOutputStream()方法. 但是在使用getOutputStream()方法传送

ajax异步传送数据的方法

1, 此方法为ajax异步发送后台数据的方法 var payment_id=$(this).attr("name"); alert(payment_id); $('.label').text(0); $.ajax({url:$('#url').val()+"/search2",  type:"POST",  dateType:"TEXT",  data:  {   payment_id:payment_id  },  succ

HttpWebRequest请求时无法发送具有此谓词类型的内容正文。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl); //--需要封装的参数 request.CookieContainer = new CookieContainer(); CookieContainer cookie = request.CookieContainer;//如果用不到Cookie,删去即可 //以下是发送的http头 request.Referer = ""; request.Acc

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比 在项目中需要使用http调用接口,实现了两套发送http请求的方法,一个是使用apache的httpclient提供的http链接池来发送http请求,另一个是使用java原生的HttpURLConnection来发送http请求,并对两者性能进行了对比. 使用httpclient中的链接池发送http请求 使用最新的4.5.2版httpclient进行实现.在maven中引入 <

GET 和 POST的区别? 用POST方法发送登陆请求

GET 和 POST的区别? 用POST方法发送登陆请求. { <1> http方法: http协议定义了很多方法对应不同的资源操作,其中最常用的是GET 和 POST 方法. { { GET.POST.OPTIONS.HEAD.PUT.DELETE.TRACE.CONNECT.PATCH } 增:PUT 删:DELETE 改:POST 查:GET } <2> 参数 { 因为 GET 和 POST 可以实现上述所有操作,所以,在现实开发中,我们只要会用GET 和 POST 方法就可

Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Android