我需要使用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
我要发送的正文是文档中的示例(上面的链接),但此时似乎并不重要,因为空正文会给出相同的响应。
答案 0 :(得分:1)
发布问题后不到一分钟,我发现了问题。当然,它不是Content-Type
标头,而是Accept
标头。删除即可解决问题。具体来说,Google抱怨我要求将application/json
作为响应类型。显然甚至不需要Accept
标头。