详解Python requests中Post请求Form Data与Request Payload的区别

凌晨两点半
凌晨两点半
发布时间:2026-10-14| 5人浏览过
原创

本文深入解析Python requests库中Post请求的两种主要参数形式:Form Data与Request Payload。通过Chrome开发者工具示例,详细对比了application/x-www-form-urlencoded与application/json两种Content-Type下的数据提交方式,并提供了对应的requests.get与requests.post代码实现,帮助开发者解决因参数格式错误导致的数据获取失败问题。

在近期爬取特定网站时,遇到一个现象:即使Post请求的参数构造正确,也无法获取到预期数据。为排查问题,尝试将Post参数进行urlencode编码后拼接至URL末尾,转换为Get请求,结果成功获取数据。这一反常现象引发了对Post请求参数构造机制的深入探究。

1. HTTP请求中Form Data与Request Payload的区别:

在Ajax Post请求中,常见的两种参数传递形式分别为Form Data和Request Payload。

Get请求时,参数直接体现于URL中,格式为key1=value1&key2=value2。而Post请求中,表单参数位于请求体(Request Body)内,同样以key1=value1&key2=value2的形式存在。通过Chrome浏览器的开发者工具,可以直观观察到这一区别。

a. Form Data类型:

针对Form Data类型的Post请求,有两种处理方式。第一种是将该Post请求转换为Get请求,即将请求参数通过"?key1=value1&key2=value2"拼接在URL之后,然后以Get方式发起请求:response = requests.get(url,headers=headers),其中url为拼接后的完整URL。

第二种方式是保持使用Post请求,将参数放置于data字段中:response = requests.post(url,headers=headers,data=data),其中url为原始的Post URL。

注意上图中红圈标注的内容,此时请求头中的Content-Type为application/x-www-form-urlencoded。点击Form Data旁边的view source,可以看到数据变为key1=value1&key2=value2的形式,如下图所示。此时,你可以将这部分内容追加到Post的Request URL后面,将其转化为Get请求,从而成功获取数据。

b. Request Payload类型

同样在Chrome浏览器开发者工具中,可以观察到两者的不同之处。此时Content-Type为application/json,表明需要传递的是一个JSON类型的对象。点击view source,如下图所示。

数据自动转换为JSON格式。此时必须发送Post请求,并将该JSON对象传入方可获取数据。示例代码如下:

response = requests.post(url,json=data,headers=headers) 与普通Post请求相比,此处的Post参数中的data必须进行序列化(serialization)处理。

参考:https://stackoverflow.com/questions/10494574/what-is-the-difference-between-form-data-and-request-payload

到此为止,关于Python requests中Post请求参数问题的详解介绍完毕。更多相关Python requests Post请求参数内容,请搜索本站往期文章或继续浏览后续相关文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。