在Python开发中,通过WebDAV协议上传XML文件是常见的文件传输需求,WebDAV扩展了HTTP协议的能力,支持对远程服务器上的文件进行增删改查操作,而requests库可以高效构造符合WebDAV要求的HTTP请求,完成XML文件的上传工作。

环境准备
首先确保已经安装requests库,如果未安装可以通过pip命令安装:
pip install requests
同时需要准备待上传的XML文件,以及WebDAV服务器的地址、认证用户名和密码,这些信息需要提前从服务器管理员处获取。
WebDAV上传XML的核心原理
WebDAV上传文件通常使用HTTP的PUT方法,将文件内容作为请求体发送到指定的服务器路径即可。对于XML文件,需要确保请求头中正确设置Content-Type为application/xml,同时处理服务器的认证要求,常见的认证方式是基本认证(Basic Auth)。
完整实现代码
以下是使用requests通过WebDAV上传XML文件的完整示例代码:
import requests
from requests.auth import HTTPBasicAuth
# WebDAV服务器配置
webdav_url = "http://192.168.0.1/webdav/test.xml" # 上传的目标路径,包含文件名
username = "webdav_user"
password = "webdav_pass"
# 待上传的XML文件路径
xml_file_path = "local_test.xml"
# 读取XML文件内容
with open(xml_file_path, "r", encoding="utf-8") as f:
xml_content = f.read()
# 构造请求头,指定内容类型为XML
headers = {
"Content-Type": "application/xml"
}
# 发送PUT请求上传XML文件
response = requests.put(
url=webdav_url,
data=xml_content.encode("utf-8"), # 将字符串编码为字节流
headers=headers,
auth=HTTPBasicAuth(username, password) # 基本认证
)
# 判断上传结果
if response.status_code in (200, 201, 204):
print("XML文件上传成功")
else:
print(f"上传失败,状态码:{response.status_code},返回信息:{response.text}")
代码说明
- webdav_url是文件上传的目标地址,需要替换为实际的WebDAV服务器路径,路径末尾可以指定上传后的文件名。
- 使用HTTPBasicAuth处理基本认证,如果服务器使用其他认证方式,需要替换为对应的认证逻辑。
- 读取XML文件后,需要将内容编码为utf-8格式的字节流再作为请求体发送,避免编码问题导致文件内容损坏。
- WebDAV上传成功的常见状态码为200、201、204,不同服务器可能返回不同的成功状态码,可以根据实际情况调整判断逻辑。
常见问题排查
上传后文件内容损坏
检查是否正确设置了Content-Type请求头,同时确认XML文件的编码格式和发送时的编码一致,避免编码转换导致内容错误。
返回401认证失败
确认用户名和密码是否正确,同时检查服务器是否开启了基本认证,部分服务器可能需要额外的认证头配置。
返回403权限不足
确认当前用户对目标WebDAV路径是否有写入权限,联系服务器管理员开通对应权限即可。
返回405方法不允许
确认服务器是否支持PUT方法,部分WebDAV服务器可能限制了请求方法,需要联系管理员调整配置。
自定义请求头扩展
如果服务器需要额外的自定义请求头,可以在headers字典中添加对应的键值对,例如添加自定义的用户标识:
headers = {
"Content-Type": "application/xml",
"X-User-Id": "test_user_001" # 自定义请求头
}
PythonrequestsWebDAVXML_upload修改时间:2026-07-06 16:09:10