requests.post(url,json,headers,timeout)函数参数json、data、parameter的区别

📅 2026/8/11 16:17:22
requests.post(url,json,headers,timeout)函数参数json、data、parameter的区别
这是一个非常常见的 requests 库使用问题。下面详细解释一下这三个参数的区别和使用场景1.json参数使用场景当你要发送 JSON 格式的数据到服务器时特点自动将 Python 对象dict、list 等序列化为 JSON 字符串自动设置Content-Type为application/json适用于 RESTful APIimport requests payload { name: John, age: 30, hobbies: [reading, swimming] } # 推荐方式 - 使用 json 参数 response requests.post( urlhttps://api.example.com/users, jsonpayload, # 自动序列化为 JSON headersheaders, timeout30 ) # 等价于手动处理 # headers[Content-Type] application/json # data json.dumps(payload) # requests.post(url, datadata, headersheaders)2.data参数使用场景发送表单数据application/x-www-form-urlencoded发送 multipart 表单数据文件上传发送原始字符串数据# 场景1表单数据 form_data { username: john, password: secret } response requests.post( urlhttps://example.com/login, dataform_data, # 自动编码为表单格式 headersheaders ) # 场景2文件上传 files {file: open(image.jpg, rb)} response requests.post( urlhttps://example.com/upload, filesfiles, data{description: My image} # 其他表单字段 ) # 场景3原始字符串 xml_data usernameJohn/name/user response requests.post( urlhttps://example.com/api, dataxml_data, headers{Content-Type: application/xml} )3.params参数使用场景用于 URL 查询字符串参数GET 请求的参数特点参数会附加在 URL 的?后面只用于 GET 请求或需要在 URL 中传递参数的情况query_params { page: 1, limit: 10, search: python } response requests.get( urlhttps://api.example.com/articles, paramsquery_params, # 添加到 URL: ?page1limit10searchpython headersheaders )总结对比参数用途Content-Type位置json发送 JSON 数据application/json请求体data发送表单数据/原始数据多种类型请求体paramsURL 查询参数-URL 中实际使用建议import requests # ✅ 推荐RESTful API 使用 json api_response requests.post( https://api.example.com/users, json{name: John, age: 30}, headers{Authorization: Bearer token} ) # ✅ 推荐表单提交使用 data form_response requests.post( https://example.com/login, data{username: john, password: secret} ) # ✅ 推荐GET 请求参数使用 params search_response requests.get( https://api.example.com/search, params{q: python, page: 1} ) # ❌ 避免不要混淆使用 # 错误用 data 发送 dict 到期望 JSON 的 API # requests.post(url, datadict_data) # 可能出错 # 正确明确指定数据格式 requests.post(url, jsondict_data) # 对于 JSON API requests.post(url, datadict_data) # 对于表单接口简单记忆API 交互→ 用json表单提交→ 用dataURL 参数→ 用params文件上传→ 用filesdata