使用HttpWebRequest发送自定义POST请求

添加人:vs2005一级(340分)   添加时间:2007-09-04    阅读次数:1385  收藏此教程

平时用浏览器看网页的时候,点击一下submit按钮的时候其实就是给服务器发送了一个POST请求。但是如何在自己的C#程序里面实现类似的功能呢?本文给出了一个简单的范例,可以实现类似的和web server之间的POST通讯。通过程序发送POST的过程如下所示:

1. 创建httpWebRequest对象
HttpWebRequest不能直接通过new来创建,只能通过WebRequest.Create(url)的方式来获得。
WebRequest是获得一些列应用层协议对象的一个统一的入口(工厂模式),它根据参数的协议来确定最终创建的对象类型。所以我们的程序里面有一个对返回对象的类型进行测试的过程。

2. 初始化HttpWebRequest对象
这个过程提供一些http请求常用的属性:agentstring,contenttype等其中agentstring比较有意思,它是用来识别你用的浏览器名字的,通过设置这个属性你可以欺骗服务器你是一个IE,firefox甚至是mac里面的safari。很多认真设计的网站都会根据这个值来返回对用户浏览器特别优化过的代码。

3. 附加要POST给服务器的数据到HttpWebRequest对象
附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。

4. 读取服务器的返回信息
读取服务器返回的时候,要注意返回数据的encoding。如果我们提供的解码类型不对会造成乱码。比较常见的是utf-8和gb2312之间的混淆,据我测试,国内的主机一般都是gb2312编码的。一般设计良好的网站会把它编码的方式放在返回的http header里面,但是也有不少网站根本没有,我们只能通过一个对返回二进制值的统计方法来确定它的编码方式。 
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Net;
 5using System.IO;
 6 
 7namespace SimpleWebRequest
 8{
 9    class Program
10    {
11        static void Main(string[] args)
12        {
13            Console.WriteLine(
14                PostDataToUrl("test", "http://www.microsoft.com")
15                );
16        }

17 
18        /// <summary>
19        /// Post data到url
20        /// </summary>
21        /// <param name="data">要post的数据</param>
22        /// <param name="url">目标url</param>
23        /// <returns>服务器响应</returns>

24        static string PostDataToUrl(string data, string url)
25        {
26            Encoding encoding = Encoding.GetEncoding(sRequestEncoding);
27            byte[] bytesToPost = encoding.GetBytes(data);
28            return PostDataToUrl(bytesToPost, url);
29        }

30 
31        /// <summary>
32        /// Post data到url
33        /// </summary>
34        /// <param name="data">要post的数据</param>
35        /// <param name="url">目标url</param>
36        /// <returns>服务器响应</returns>

37        static string PostDataToUrl(byte[] data, string url)
38        {
39            创建httpWebRequest对象
49 
50            填充httpWebRequest的基本信息
55 
56            填充要post的内容
62 
63            发送post请求到服务器并读取服务器返回信息
78 
79            读取服务器返回信息
88            return stringResponse;
89        }

90 
91        const string sUserAgent = 
92            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
93        const string sContentType = 
94            "application/x-www-form-urlencoded";
95        const string sRequestEncoding = "ascii";
96        const string sResponseEncoding = "gb2312";
97    }

98}

 

 

1页 第1上一页1下一页
相关的教程: HttpWebRequest POST
收藏此教程

当前平均分: 0.0(1 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: