错误代码 403 |通过 CalDAV 从 iCloud 日历中获取对象 |扑动

Error Code 403 | Fetch Objects from iCloud Calendar through CalDAV | Flutter

提问人:iocomxda 提问时间:10/23/2023 更新时间:10/23/2023 访问量:30

问:

我正在使用 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;
}
Android iOS Flutter iCalendar Caldav

评论


答: 暂无答案