CalDAV查询因重复事件返回异常结果及衍生问题求助
CalDAV查询NextCloud日历异常问题
我部署了两台NextCloud服务器,通过Python发起CalDAV时间范围查询时,请求能正常执行,但返回结果存在异常:
- 大量超出查询时间范围的重复事件
- 使用
<c:expand>扩展重复事件后,又出现两个新问题:- 时间字段缺失时区偏移信息
- 结果行尾附带HTML编码的回车字符(示例:
DTSTART:20250907T140000Z )
初始查询XML
<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"> <d:prop><d:getetag /><c:calendar-data /></d:prop> <c:filter> <c:comp-filter name="VCALENDAR"> <c:comp-filter name="VEVENT"> <c:time-range start="20250911T000000" end="20250919T000000"/> </c:comp-filter> </c:comp-filter> </c:filter> </c:calendar-query>
Python请求代码
requests.request( "REPORT", "https://my.nextcloud.de/remote.php/dav/calendars/myUser/myCalendar/", headers={"Depth": "1", "Content-Type": "text/html"}, auth=HTTPBasicAuth(reqName, reqPwd), data=reqData )
扩展后的查询XML
<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"> <d:prop> <c:calendar-data> <c:expand start="20250907T000000" end="20250908T000000"/> </c:calendar-data> </d:prop> <c:filter> <c:comp-filter name="VCALENDAR"> <c:comp-filter name="VEVENT"> <c:time-range start="20250907T000000" end="20250908T000000"/> </c:comp-filter> </c:comp-filter> </c:filter> </c:calendar-query>
问题修复方案
修正请求Content-Type头
当前请求的Content-Type设为text/html,但CalDAV的REPORT要求使用application/xml或text/xml,这会导致服务器解析异常,是引发重复事件和格式问题的核心原因之一。修改headers:headers={"Depth": "1", "Content-Type": "application/xml"}解决时区缺失问题
在<c:calendar-data>节点中明确请求时区信息,同时给时间范围参数加上UTC标识(Z后缀),避免服务器解析时的时区歧义:<c:calendar-data> <c:expand start="20250907T000000Z" end="20250908T000000Z"/> <c:timezone xmlns="urn:ietf:params:xml:ns:caldav"/> </c:calendar-data>也可以指定具体时区,比如
Europe/Berlin,替换上述<c:timezone>节点为:<c:timezone xmlns="urn:ietf:params:xml:ns:caldav">Europe/Berlin</c:timezone>清除编码回车字符
返回结果中的 是HTML转义的回车符(CR),可以通过Python的html模块解码后统一换行格式:import html # 解码HTML转义字符 decoded_content = html.unescape(response.text) # 统一换行符为\n cleaned_content = decoded_content.replace('\r\n', '\n').replace('\r', '\n')排查服务器配置
两台服务器都出现相同问题,建议检查NextCloud日历应用是否为最新版本,确认CalDAV扩展功能已正常启用,必要时重启NextCloud服务或重新安装日历应用。
内容的提问来源于stack exchange,提问作者awado
相关产品推荐
相关产品推荐

