Http的POST请求

项目系统经常需要调用外部系统的接口,使用http的post请求方式来获得数据,陈达经常搞混post的请求方式,在这里记一下。

Post

post请求,类似于get请求,拥有状态行、请求头header和请求体body。

状态行

状态行比较简单,一般都长下面的模样:

1
<methon> <url> <version>

比如:

1
POST www.iloveqyc.com HTTP/1.1

请求头

请求头则是用来说明解释本请求的上下文,比如请求头里可以指定cookie、UA等信息。在这里主要关注Content-Type这个信息,它指定了请求体body里面数据的编码方式。

编码方式是什么意思呢?陈达要给远方的服务器发消息,消息内容塞在body里面,服务器收到消息后怎么知道消息体里面是什么东西呢?把消息体当做key-value?当做json串?当做xml?服务器做不到啊~

所以在使用Post的时候,需要在Content-Type里指明消息体body的编码方式。

消息体

消息体主要就是用来承载该post请求要发送的内容,其编码方式可以用消息头header里的Content-Type指定。

Content-Type

application/x-www-form-urlencoded

这种方式很常见,一般页面上的表格都是用x-www-form-urlencoded的方式post,body里的提交值按照key1=value1&key2=value2进行排列,且进行url转码(比如转成unicode)。

这种方式也是目前项目用的post方式。

multipart/form-data

这种方式主要是用来上传文件,在body里面指定文件类型,和x-www-form-urlencoded一样,是2种最常用的方式。

application/json

使用这种方式,你可以在body里直接贴json字符串,而不用写键值对。(有的人不直接用application/json,而是使用x-www-form-urlencoded,在键值对的value里面写json,这倒也是一种方法)

text/xml

顾名思义,这种方式提交的是xml,不过xml太臃肿,用的比较少