提问人:iocomxda 提问时间:10/23/2023 更新时间:10/23/2023 访问量:30
错误代码 403 |通过 CalDAV 从 iCloud 日历中获取对象 |扑动
Error Code 403 | Fetch Objects from iCloud Calendar through CalDAV | Flutter
问:
我正在使用 Flutter 和 Dart 以便通过 CalDAV 协议从我的 iCloud 日历中获取对象。我已经为我的 Apple 帐户创建了一个特定于应用程序的密码,实际上我正在使用该密码进行登录,我能够正确执行“检索日历信息”部分中的每一步,如本指南所示,但我无法继续并获取对象,因为我收到错误代码 403。
403 Forbidden 错误表示服务器了解 请求,但无法提供其他访问权限。
这是我当前使用的代码。我不确定我是否必须在请求中包含 c 标签。
这是 CalDAV 的官方文档。
Future<http.Response> fetchObjects() async {
final request = http.Request(
'REPORT',
Uri.parse('https://pXXX-caldav.icloud.com:XXX/3XX91XX0X/calendars'),
);
request.headers['Authorization'] =
'Basic ' + base64Encode(utf8.encode('$appleId:$password'));
request.headers['Depth'] = '1';
request.headers['Prefer'] = 'return-minimal';
request.headers['Content-Type'] = 'application/xml; charset=utf-8';
final body = '''
<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:filter>
</c:calendar-query>
''';
request.body = body;
final response = await request.send();
// Convert the StreamedResponse to a Response.
final convertedResponse = await response.stream.toBytes();
final parsedResponse =
http.Response.bytes(convertedResponse, response.statusCode);
print(parsedResponse.statusCode);
print(parsedResponse.body);
return parsedResponse;
}
答: 暂无答案
评论