在Linux上删除Google Apps Domain用户帐户中的联系人失败

时间:2014-09-10 03:02:05

标签: f# mono gdata gdata-api

使用google-gdata客户端库,我可以将对帐户添加到Google / GMail帐户中 但是当我尝试删除它们时,我会根据帐户类型得到两个不同的结果。

当目标帐户是纯GMail帐户时,我可以删除联系人,但不会删除 所有联系人一气呵成。有时它会返回一些,有时甚至高达25,即使我正在检查 如果有更多的联系人并循环它们。

当目标帐户是Google Apps帐户时,我只是暂停(大约2分钟后) 请注意,即使是Google Apps帐户,我也可以添加联系人。

let service = new ContactsService("ContactSync")
service.setUserCredentials(username, password)

let token = service.QueryClientLoginToken()
service.SetAuthenticationToken(token)

let uri = ContactsQuery.CreateContactsUri("default")
let query = new ContactsQuery(uri)

let rec DeleteAllGoogleContacts (query : ContactsQuery) =
    let feed = service.Query(query) : ContactsFeed

    feed.Entries 
    |> List.ofSeq
    |> List.iter(fun f -> f.Delete())

    match feed.NextChunk with
    | x when String.IsNullOrWhiteSpace(x) -> ()
    | _ -> DeleteAllGoogleContacts(new ContactsQuery(feed.NextChunk)) 

DeleteAllGoogleContacts(query)

Google Apps帐户的错误是(为隐私而更改了电子邮件):

  

Google.GData.Client.GDataRequestException:执行请求   失败:   https://www.google.com/m8/feeds/contacts/email@domain.com/full/22280c0f9f627f   ---> System.Net.WebException:请求超时    在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)[0x00000] in:0    在System.Net.HttpWebRequest.GetResponse()[0x00000]中:0    在Google.GData.Client.GDataRequest.Execute()[0x00000]中:0    ---内部异常堆栈跟踪结束---    在Google.GData.Client.GDataRequest.Execute()[0x00000]中:0    在Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)[0x00000] in:0

首次调用DeleteAllGoogleContacts时,它将成功获取Feed 并且条目数小于或等于25.超时发生在调用f.Delete()

请注意,就我目前所知,我不能在这里使用OAuth,因为 这将在没有用户交互的无头服务器上运行。

更新

我发现还有另一种方法来检索联系人

let Delete() =
    let requestSettings = new RequestSettings("ContactSync", username, password)
    requestSettings.AutoPaging <- true

    let contactsRequest = new ContactsRequest(requestSettings)

    let feed = contactsRequest.GetContacts() : Feed<Contact>
    feed.Entries
    |> List.ofSeq
    |> List.iter(fun f -> contactsRequest.Delete(f))

这一次检索所有联系人,但我仍然在Delete()

时获得超时

更新2:

这实际上可能与防火墙有关,因为我可以让它工作 来自另一个网络。如果是这样,我会删除该问题,因为它不相关。

更新3:

它似乎不是由防火墙引起的 在带有.NET的Windows上运行时,一切都按预期工作 在Linux上使用从源编译的最新Mono和FSharp运行时,
我们得到超时异常。

我唯一猜到的是它与SSL证书有关 例如,如果要在Linux上访问GMail SMTP,则必须发出以下命令:

mozroots --import --ask-remove
certmgr --ssl smtps://smtp.gmail.com:465

否则它将无效。也许我必须为GData API做类似的事情?

更新4:

查看Update()Delete()的端点,您可以看到它们是同一个

https://www.google.com/m8/feeds/contacts/userEmail/full/{contactId}

唯一的区别是正在使用的HTTP动词:PUT vs UPDATE,我确认了 Update()在两个目标(Windows / Linux),(GMail,Google Apps)的平台上都有效。

下图显示了Delete()的4种不同场景:

enter image description here

0 个答案:

没有答案