我的知识记录

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= 是新手最容易踩的坑,用错了服务器收不到数据。

Python requests POST提交表单教程:登录与数据提交示例

标签:

更新时间:2026-09-14 20:48:16

上一篇:Python requests带参数查询教程:GET传参与URL拼接

下一篇:Python requests爬取分页数据:循环翻页与停止条件