C# HTTP系列3 HttpWebRequest.ContentType属性

获取或设置请求的 Content-type HTTP 标头的值。默认值为null

常见的请求内容类型为以下几种:

 1 /// <summary>
 2 /// HTTP 内容类型(Content-Type)
 3 /// </summary>
 4 public class HttpContentType
 5 {
 6     /// <summary>
 7     /// 资源类型:普通文本
 8     /// </summary>
 9     public const string TEXT_PLAIN = "text/plain";
10 
11     /// <summary>
12     /// 资源类型:JSON字符串
13     /// </summary>
14     public const string APPLICATION_JSON = "application/json";
15 
16     /// <summary>
17     /// 资源类型:未知类型(数据流)
18     /// </summary>
19     public const string APPLICATION_OCTET_STREAM = "application/octet-stream";
20 
21     /// <summary>
22     /// 资源类型:表单数据(键值对)
23     /// </summary>
24     public const string WWW_FORM_URLENCODED = "application/x-www-form-urlencoded";
25 
26     /// <summary>
27     /// 资源类型:表单数据(键值对)。编码方式为 gb2312
28     /// </summary>
29     public const string WWW_FORM_URLENCODED_GB2312 = "application/x-www-form-urlencoded;charset=gb2312";
30 
31     /// <summary>
32     /// 资源类型:表单数据(键值对)。编码方式为 utf-8
33     /// </summary>
34     public const string WWW_FORM_URLENCODED_UTF8 = "application/x-www-form-urlencoded;charset=utf-8";
35 
36     /// <summary>
37     /// 资源类型:多分部数据
38     /// </summary>
39     public const string MULTIPART_FORM_DATA = "multipart/form-data";
40 }

提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。

ContentType的属性包含请求的媒体类型。分配给ContentType属性的值在请求发送Content-typeHTTP标头时替换任何现有内容。

要清除Content-typeHTTP标头,请将ContentType属性设置为null

此属性的值存储在WebHeaderCollection中。如果设置了WebHeaderCollection,则属性值将丢失。

参考示例代码:

 1 private HttpResult Request(string url, string data, string method, string contentType)
 2 {
 3     HttpResult httpResult = new HttpResult();
 4     HttpWebRequest httpWebRequest = null;
 5 
 6     try
 7     {
 8         httpWebRequest = WebRequest.Create(url) as HttpWebRequest;
 9         httpWebRequest.Method = method;
10         httpWebRequest.Headers = HeaderCollection;
11         httpWebRequest.CookieContainer = CookieContainer;

12         /*此属性的值存储在WebHeaderCollection中。如果设置了WebHeaderCollection,则属性值将丢失。
13          *所以放置在Headers 属性之后设置
14         */
15         httpWebRequest.ContentType = contentType;
16         httpWebRequest.UserAgent = _userAgent;
17         httpWebRequest.AllowAutoRedirect = _allowAutoRedirect;
18         httpWebRequest.ServicePoint.Expect100Continue = false;
19 
20         if (data != null)
21         {
22             httpWebRequest.AllowWriteStreamBuffering = true;
23             using (Stream requestStream = httpWebRequest.GetRequestStream())
24             {
25                 requestStream.Write(EncodingType.GetBytes(data), 0, data.Length);
26                 requestStream.Flush();
27             }
28         }
29 
30         HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
31         if (httpWebResponse != null)
32         {
33             GetResponse(ref httpResult, httpWebResponse);
34             httpWebResponse.Close();
35         }
36     }
37     catch (WebException webException)
38     {
39         GetWebExceptionResponse(ref httpResult, webException);
40     }
41     catch (Exception ex)
42     {
43         GetExceptionResponse(ref httpResult, ex, method, contentType);
44     }
45     finally
46     {
47         if (httpWebRequest != null)
48         {
49             httpWebRequest.Abort();
50         }
51     }
52 
53     return httpResult;
54 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

如何获得PowerShell命令的历史记录

我在最近的学习过程中,发现PowerShell的命令的历史记录有时会包含系统敏感信息,例如远程服务器的连接口令,于是我对PowerShell的的历史记录功能做了...

42630
来自专栏毛利学Python

当年pass到很多扒手的题

可以看到经过了2次请求,最后在http://datamining.comratings.com/exam3中得到数据,现在注意resquesr中的hearder...

11230
来自专栏玩转JavaEE

学艺不精,总是掉坑!前后端分离历险记

Spring Boot + Vue 这一对技术栈目前看来可以说是非常的火热,关于 Spring Boot 松哥已经写过多篇教程,如:

8410
来自专栏测试工程师成长之道

实用的Mac命令行工具

iTerm2 - 免费的终端工具,直接替代自带的 Terminal,有非常多惊人的特性。

37120
来自专栏不止dotNET

.NET 程序员如何学习Vue

之所以取这个标题,是因为本文来自内部培训的整理,培训的对象是公司的 .NET 程序员,.NET 程序员学习 Vue 是为了在项目中做二次开发时能够更好地跟产品对...

13320
来自专栏Python绿色通道

爬虫工程师必玩的三个闯关网站

为了让萌新选手有题可练,咸鱼搜罗了三个可以 py 的爬虫闯关网站,希望各位适龄萌新按需 py。

24320
来自专栏五分钟学算法

寓教于乐,用玩游戏的方式学习 Git!

从刚接触电脑时的打字练习软件 金山打字通,到程序猿写代码的利器 Vim 都有小游戏(金山打字通游戏、VIM Adventures)来帮助我们入门。

7230
来自专栏五分钟学算法

LeetCode第 146 号问题: LRU 缓存机制

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。

10420
来自专栏志学Python

Web | 浅谈用Python进行Web开发

Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大...

6610
来自专栏浪子编程走四方

推荐几个常见的网络抓包工具

最近在开发一款小程序,老是有人说有一个小功能的数据不正确,但是自己测试几个账号都是正确的,无法判断是前端的问题还是后端的问题,为了像开发web应用一样调试,便找...

93920

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励