惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
S
Securelist
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
Attack and Defense Labs
Attack and Defense Labs
Vercel News
Vercel News
腾讯CDC
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
量子位
S
Schneier on Security
Hacker News: Ask HN
Hacker News: Ask HN
Cyberwarzone
Cyberwarzone
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
T
Tenable Blog
PCI Perspectives
PCI Perspectives
MyScale Blog
MyScale Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
W
WeLiveSecurity
N
News | PayPal Newsroom
P
Proofpoint News Feed
O
OpenAI News
C
CERT Recently Published Vulnerability Notes
B
Blog
Cisco Talos Blog
Cisco Talos Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy

博客园 - 克隆

SVN快速入门(TSVN) 简单的3个SQL视图搞定所有SqlServer数据库字典 简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况) 敏捷开发Scrum 学习笔记,适于移动开发 团队的职责和任务之间的关系 精心收集的jQuery常用的插件1000 24款超实用的Web 2.0风格翻页代码 【转】使用 Entity Framework + ListView + DataPager 实现数据分页 (转)ASP.NET页面打印技术的总结 [转]数据库设计 Step by Step (5) [转]jquery插件弹出div SQLServer2008/2005 生成数据字典SQL语句 SQL HierarchyID 数据类型 OSWorkflow表结构分析 javascript动态创建VML [转]由于项目原因看了一下vml,写了一个Web工作流的设计器雏形! VML流程图 启用IIS的Gzip压缩 IIS压缩
C# HttpWebRequest提交数据方式浅析
克隆 · 2015-03-08 · via 博客园 - 克隆
C# HttpWebRequest提交数据方式学习之前我们先来看看什么是HttpWebRequest,它是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过HTTP协议和服务器交互。

C# HttpWebRequest的作用:

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

C# HttpWebRequest提交数据方式:

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

C# HttpWebRequest提交数据方式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())  

{  

   //在这里对接收到的页面内容进行处理  

} 

C# HttpWebRequest提交数据方式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 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站能够识别。

C# HttpWebRequest提交数据方式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。

C# HttpWebRequest提交数据方式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(bs, 0, bs.Length);  

}  

using (WebResponse wr = req.GetResponse())  

{  

   //在这里对接收到的页面内容进行处理  

}   

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

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

C# HttpWebRequest提交数据方式的基本内容就向你介绍到这里,希望对你了解和学习C# HttpWebRequest提交数据方式有所帮助。