Google Contacts API中使用的Google Data语法正确的Content-Type是什么?

时间:2019-07-02 18:25:56

标签: xml go google-api content-type atom-feed

我需要使用Golang阅读和更新G Suite域中的Google共享联系人。由于该API没有现有的Go客户端库,因此我必须在http级别与该API进行交互。目前,我一直在发送正确的Content-Type标头。

由于https://developers.google.com/admin-sdk/domain-shared-contacts#Creating的文档说要使用application/atom+xml,这自然是我尝试过的。但是,我收到的响应是带有正文消息“无可用的可用类型”的406 Not Acceptable。省略Content-Type将返回400“响应不包含任何内容类型”。使用text/xml返回415,其中“ Content-Type text / xml不是有效的输入类型。”

    req, err := http.NewRequest("POST", href, bytes.NewBuffer([]byte(body)))
    if err != nil {
        return "", err
    }

    req.Header.Set("GData-Version", "3.0")
    req.Header.Set("Accept", "application/json")
    req.Header.Set("User-Agent", "personnel-sync")
    req.Header.Set("Content-Type", "text/xml")

    resp, err := g.Client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    bodyBytes, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    bodyString := string(bodyBytes)
    log.Println(bodyString)
    log.Println(resp.Status)

    return bodyString, nil

我要发送的正文是文档中的示例(上面的链接),但此时似乎并不重要,因为空正文会给出相同的响应。

1 个答案:

答案 0 :(得分:1)

发布问题后不到一分钟,我发现了问题。当然,它不是Content-Type标头,而是Accept标头。删除即可解决问题。具体来说,Google抱怨我要求将application/json作为响应类型。显然甚至不需要Accept标头。