Python requests POST提交表单教程:登录与数据提交示例
讲解requests用data字典提交POST表单,模拟网页登录、评论、搜索提交等场景,对比GET与POST区别,附带异常处理。
场景痛点
工作中经常遇到需要"点按钮提交"的场景:批量提交工单、自动填表单、模拟登录拿数据。浏览器里点一下很简单,但用程序做就得搞清楚POST请求怎么发。requests用一个 data 字典就能模拟表单提交,和你在网页上填完点"提交"效果一样。
用到的库
pip install requests beautifulsoup4 lxml
完整代码
# 导入requests
import requests
def post_form(username, password):
"""用POST方式提交表单"""
# 表单字段放到字典里,相当于网页上填好的输入框
form_data = {
"username": username,
"password": password,
"remember": "on", # 勾选框的值
}
url = "https://httpbin.org/post"
# 用data参数发POST,自动设置Content-Type为表单格式
resp = requests.post(url, data=form_data, timeout=10)
resp.encoding = resp.apparent_encoding
print("状态码:", resp.status_code)
print("服务器收到的表单:")
print(resp.text)
return resp
def post_json(payload):
"""有时候接口要求传JSON而不是表单"""
# 用json参数,requests自动把字典转成JSON字符串
url = "https://httpbin.org/post"
resp = requests.post(url, json=payload, timeout=10)
print("JSON接口返回:")
print(resp.text)
def main():
# 演示表单提交
post_form("zhangsan", "123456")
# 演示JSON提交
post_json({"name": "李四", "age": 28, "tags": ["Python", "自动化"]})
if __name__ == "__main__":
main()
代码讲解
requests.post(url, data=字典)会把字典按application/x-www-form-urlencoded格式编码后放在请求体里,和网页表单提交完全一致。- 如果接口要求JSON格式(现在大多数现代API都是),用
json=字典而不是data=,requests会自动json.dumps并设置正确的Content-Type: application/json。 - 登录类接口通常会在响应头里返回Set-Cookie,下次请求要带上Cookie才能保持登录态,这需要用Session,后面有专门文章讲。
- httpbin.org/post 会把你POST过去的内容原样回显,非常适合调试学习。
运行结果
运行后控制台会先打印表单提交的回显结果,form 字段里能看到 username、password 等;再打印JSON提交的结果,json 字段里能看到我们传过去的字典。两个状态码都是200即成功。
注意事项
- 密码、token这类敏感数据不要硬编码在脚本里,建议读环境变量或配置文件。
- 真实登录接口经常带验证码、CSRF token、设备指纹,纯requests可能不够,需要配合Session和Headers。
- 高频POST请求可能触发风控,写脚本前先确认对方网站允许自动化操作。
- 区分
data=和json=是新手最容易踩的坑,用错了服务器收不到数据。

更新时间:2026-09-14 20:48:16
上一篇:Python requests带参数查询教程:GET传参与URL拼接