在进行前后台开发时,我们往往需要关注发送/接收数据的类型,不同类型的数据有不同的处理方式。
GET 数据获取
获取查询参数
1 | # url: http://localhost/user?username=lina |
POST 数据获取
POST 提交数据有四种方式,分别是 json,
这里我们使用 postman + tcpdump 分别来发送和抓取http报文。看看不同提交方式,在http里显示是什么样的。
tcpdump 抓包命令:
1 | # 这里抓取eth0网口,10000 端口,的报文 |
分别用 postman 发送不同格式的POST请求,然后抓取报文后使用wireshark分析,具体如下:
json类型
1 | POST /api/project/add HTTP/1.1 |
可以看到json的格式比较简单,直接以字典的方式存放在body当中,tornado获取方式如下:
1 | class ProfileHandler(RequestHandler): |
x-www-form-urlencoded类型
x-www-form-urlencoded 是默认的form提交方式,数据存放方式和QueryString的方式类似,具体如下:
1 | POST /api/project/add HTTP/1.1 |
tornado 获取参数方式如下:
1 | class ProfileHandler(RequestHandler): |
form-data类型
1 | POST /api/project/add HTTP/1.1 |
multipart/form-data类型的数据会生成boundary,用于分割不同字段,以避免正文内容重复。
使用 python 发送multipart/form-data数据比较麻烦,可以使用requests-toolbelt
库。
1 | from requests_toolbelt import MultipartEncoder |