问题标签 [carddav]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1479 浏览

icloud - 使用 PHP 从 iCloud 获取 vCard

通过 serverfault.com、stackoverflow.com、apple.stackexchange.com 搜索,谷歌搜索仍然没有走远。需要有人帮忙。

我正在尝试从 iCloud 帐户获取所有 vCard。

我从 Roundcube/CardDav 的插件开始。

来自以下文章:

stackoverflow.com/questions/24202551/manipulate-groups-in-icloud-with-carddav-protocol sabre.io/dav/building-a-carddav-client/sabre.io/dav/clients/osx-addressbook/stackoverflow.com /questions/15111887/how-to-import-icloud-contacts-in-php# tools.ietf.org/html/rfc6352#section-8.7.1

我设法得到了校长,校长的地址。但是获取卡片的最后一步返回的 ContentLength 为 0。

这是我所做的:

获取Principal,使用“https://contacts.icloud.com/”作为URL,PROPFIND,DEPTH 0:

回复:

接下来,这是我回家的方法,使用“https://contacts.icloud.com/1331115018/principal/”,PROPFIND,DEPTH 0:

回复:

最后,这是我尝试获取所有 vCard 的方法,使用 https://p44-contacts.icloud.com:443/1331115018/carddavhome/,REPORT,DEPTH 1:

回复:

或者

回复:

或者

回复:

我需要做什么?

0 投票
0 回答
247 浏览

telnet - Horde SabreDAV CardDAV 连接错误

我正在尝试创建一个连接到 Hostgator 服务器的 CardDAV 客户端。我使用了正确的 CardDAV url,但是当我执行下面的请求时,我得到了下面的响应。

要求

回复

我希望这不是一个坏问题。我对这个社区相当陌生。

0 投票
1 回答
298 浏览

oauth-2.0 - 通过 carddav 访问 GMail 联系人需要哪些范围?

在位于此处的有限 Google CardDAV 文档中,提到了以下内容

客户端应用程序必须使用 HTTPS,并且必须为用户的 Google 帐户提供 OAuth 2.0 身份验证。CardDAV 服务器不会对请求进行身份验证,除非它通过 HTTPS 到达并使用 Google 帐户的 OAuth 2.0 身份验证,并且您的应用程序已在 DevConsole 上注册。任何尝试使用基本身份验证或使用与 Google 帐户不匹配的电子邮件/密码通过 HTTP 进行连接的尝试都会导致 HTTP 401 Unauthorized 响应代码。

但是,在使用 OAuth 2.0 时,需要指定访问信息所需的范围。我在文档或在线的任何地方都找不到 CardDAV 访问所需的范围。

我尝试使用OAuth 2.0 Playground来授予对多个范围的访问权限,并使用在“Bearer”授权标头中生成的令牌向 Google 的 CardDAV 服务器发送请求,但每次尝试时我都会收到 403 响应。相同的请求适用于基本身份验证。

有没有人有使用谷歌 CardDAV API 和 OAuth 2.0 的经验,并且知道需要什么范围?

谢谢!

0 投票
0 回答
567 浏览

python - Python 3 CardDAV 客户端或库

是否有任何符合RFC 6352的 CardDAV 客户端软件或与 Python 3 兼容的库?

我知道pyCardDAV但这个包还没有准备好 python 3。

0 投票
1 回答
489 浏览

sql - 用于联系人的 vcard vs sql-table

前几天我在查看 SOGo SQL 表,发现记录存储为 vcard 数据,而不是具有不同列(如姓氏、电话号码等)的精细表。

虽然有一个名为 sogo_quick_contacts 的表具有我所期望的架构,但并非所有列都在那里,只有一些基本列。

我想知道为什么会这样?用整个 vcard-data 查询记录并提取我需要的信息会更好吗?应用 SELECT 查询指示我正在寻找的某些列(如果它们可用)不是更好(更快)吗?

CardDav 似乎提供了这个 vcard-data,它们是否更适合联系人查找,为什么?

如果我只想列出姓名和生日怎么办?提取所有 vcard 的速度不会比使用 SQL 查询慢得多吗?我将所有内容都拆分为不同的列?

0 投票
1 回答
355 浏览

node.js - 使用 Node dav 客户端实现增量 CardDAV 同步

我正在尝试编写一个简单的 node.js 程序来将一些通讯簿从 CardDAV 服务器同步到本地 MySQL 数据库。我正在使用节点dav客户端。

我知道 CardDAV 仅支持自上次同步以来的同步更改 via sync-token,当我浏览dav 客户端的源代码和自述文件时,我看到了一些对同步令牌的引用。但是,我对 DAV 很陌生,所以我不能 100% 确定如何将它们组合在一起。

我猜我需要存储同步令牌(和级别?)服务器在我运行同步后发回,然后将其包含在我的下一个同步请求中。我在正确的轨道上吗?

0 投票
1 回答
332 浏览

carddav - Google Carddav 服务器在初始同步请求期间返回 400

在与 Google 的 CardDav 服务器进行初始同步时,我正在使用同步收集方法进行 REPORT 请求。在这个请求中,我传递了空的同步令牌,因为它是初始同步的。这是根据 RFC 6578 ( https://www.rfc-editor.org/rfc/rfc6578#section-3.8 )。

请求正文如下所示:

我期待所有联系人的 etag 的多状态响应。但是,谷歌返回 HTTP 错误 400。

如果我做错了什么,有人可以吗?

0 投票
1 回答
210 浏览

webdav - 如何在我修改 DAV 文件夹时确定它是否有并行更新

我正在将本地客户端与 DAV 文件夹(在这种特殊情况下为 CardDAV)同步。

对于这个文件夹,我有 ETag(SabreDAV 方言中的 CTag,用于区分文件夹 etag 和项目 etag)。如果 CTag 已更改,我需要再次重新同步。但是如果这个变化是我自己造成的(例如我刚刚上传了一个联系人到这个 CardDAV 文件夹中),有没有办法避免重新同步?

理想情况下,我希望 DAV 服务器会在每个请求上返回此信息,这会更改服务器上的任何内容:

  • CTag1,当前文件夹的 CTag,与应用我的操作之前一样
  • CTag2,应用我的操作后当前文件夹的 CTag
  • 分配给相关项目的 ETag(尽管它与此特定问题无关)。

这将使我了解 CTag 更改是否仅由我自己的操作(并且不需要重新同步)或两者之间发生的其他事情引起(因此需要重新同步)。

目前,我只能随时查询文件夹的 CTag,但我不知道如果 CTag 发生更改该怎么办(在伪代码中):

cTag2 显然与 cTag1 不同,但这提供了关于中间是否发生其他事情的零信息(另一个客户端更改了同一文件夹中的某些内容)。所以,cTag0 <> cTag1 compare 不会让我免于竞争条件,我可以认为我是同步的,而其他一些更新偷偷地被忽视了。

拥有会很棒:

我知道 DAV-Sync 协议扩展,但这将是另一回事。在这个任务中,我指的是标准 DAV,不允许扩展。

编辑:我脑海中闪过一个念头。我注意到 CTag 是连续的。这是一个在对文件夹的每次操作中都会增加 1 的数字。因此,如果在获得 CTag、执行我的操作和再次获得 CTag 之间增加了 1 以上,这将表明刚刚发生了其他事情。但这似乎并不可靠,恐怕它过于特定于实现而无法依赖这种行为。寻找更强大的解决方案。

0 投票
1 回答
923 浏览

synchronization - 如何将 abook 与 carddav 服务器集成?

我正在运行 Nextcloud,我的联系人使用 同步到我的笔记本电脑vdirsyncer,这给我留下了一个充满.vcf文件的目录。我想要一本书能够阅读和编辑这些内容,但我不太确定如何做到这一点。

这甚至可能吗?还是我只是在做梦?

0 投票
1 回答
104 浏览

vcf-vcard - 如何检测 vCard 中的更改?

我正在开发一个库来编辑 CardDAV 服务器上的联系人,我想知道同步联系人的正确方法是什么。

因此,当我发现特定联系人的 etag 已更改时:如何同步两者?

我是否只是合并更改的数据,例如电话号码?还是必须一方(服务器或客户端)获胜?以及如何检测数字是否更改或添加?