![8f427ab6e8c9627b88bf54701c447b5a.png](https://img-blog.csdnimg.cn/img_convert/8f427ab6e8c9627b88bf54701c447b5a.png)
文 | 猿天罡
前言
最近想用 Python 自动地爬取某个站点里的图片,没想到其请求数据是以request payload格式传输给后端进行处理的。博主还是第一次遇到这种情况,写下这篇文章记录一下解决过程。
博主浏览器使用的是 Chrome,下文说的浏览器一律指的是 Chrome浏览器。
POST提交数据常见的几种Content-Type
在网络请求中常用的Content-Type有很多,但是在POST请求下我们常用的Content-Type大约有3种。
1.application/x-www-form-urlencoded
这应该是我们最常见到的POST数据提交方式,原生的表单默认提交方式就是这个,
我用站长工具模拟原生的POST请求,如图1-1:
![6837bf606f534379bb37ecc75e08198b.png](https://img-blog.csdnimg.cn/img_convert/6837bf606f534379bb37ecc75e08198b.png)
图1-1
第一个红框可以看到请求的Content-Type确实是application/x-www-form-urlencoded,第二个红框展示的是向后端请求的数据,它是经过浏览器解码然后展示给我们看的,实际上数据编码格式如图1-2:
![70a52b69d80d7371a301100ce7b650df.png](https://img-blog.csdnimg.cn/img_convert/70a52b69d80d7371a301100ce7b650df.png)
图1-2
可以看到,我们请求的数据变成了键值对的形式,并且中间用&分隔,形如key1=val1&key2=val2。
2.multipart/form-data
使用表单传数文件时,Content-Type必须是multipart/form-data,传输的文件会被分割成多个部分,每部分使用--boundary分割。
大体如图2-1:
![4e9e2a8762ad28bf04e7f92339eeefb7.png](https://img-blog.csdnimg.cn/img_convert/4e9e2a8762ad28bf04e7f92339eeefb7.png)
图2-1
第二个红框数据也是经过浏览器解码的,原始数据如图2-2:
![86e6f116f1ceb129d82b8da549a0c595.png](https://img-blog.csdnimg.cn/img_convert/86e6f116f1ceb129d82b8da549a0c595.png)
图2-2
3.application/json
一般情况下,我们遇到的POST请求数据编码格式都是application/x-www-form-urlencoded,但是这种格式有局限性,如果想向后端传输复杂的数据,如:
{ "info": [ { "name": "Kelvin