使用Python-requests调用REST API上传文件时遇400错误求助
解决Python调用REST API上传文件返回400错误的问题
以下是几个排查和解决方向:
核对表单字段名:Postman中上传文件时,form-data的字段名称必须和Python代码中
files字典的键完全一致。比如Postman里用的是upload而不是file,就会导致参数不匹配返回400。打开Postman的请求Body详情,确认字段名后修改代码。确保文件可正常读取:
- 检查文件路径在不同系统下的正确性:Windows用双斜杠,Linux用正斜杠,同时确认文件存在且当前用户有读取权限。可以添加简单的校验:
import os file_path = "/path/to/1clickVPN-1.1.3.apk" # Linux路径示例 if not os.path.isfile(file_path): print("文件不存在") if not os.access(file_path, os.R_OK): print("无文件读取权限") - 推荐用
with语句管理文件对象,避免资源泄漏:with open(file_path, 'rb') as f: files = {'file': f} response = requests.post('http://193.206.183.20:8000/api/v1/upload', headers=headers, files=files)
- 检查文件路径在不同系统下的正确性:Windows用双斜杠,Linux用正斜杠,同时确认文件存在且当前用户有读取权限。可以添加简单的校验:
校验请求头配置:Postman会自动生成符合要求的请求头(比如
Content-Type: multipart/form-data),手动设置的headers可能覆盖或缺失必要信息。可以尝试移除自定义headers中不必要的项,或者对比Postman的请求头,补充Python代码中缺少的字段。查看API返回的详细错误信息:不要只打印响应状态码,打印
response.text或response.json()获取具体错误描述,这是最快定位问题的方法:print(response.text) # 若API返回JSON格式错误信息 try: print(response.json()) except: pass对比请求差异:用抓包工具(如Wireshark)分别捕获Postman和Python代码发送的请求,对比两者的请求体、头信息、边界标识等细节,差异点通常就是问题所在。
内容的提问来源于stack exchange,提问作者ThanhLam112358
相关产品推荐
相关产品推荐

