Каков правильный тип контента для синтаксиса данных Google, который используется в API контактов Google? - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно прочитать и обновить общие контакты Google в домене G Suite с помощью Golang.Поскольку для этого API не существует клиентской библиотеки Go, мне приходится взаимодействовать с API на уровне http.В настоящее время я застрял при отправке правильного заголовка 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 Ответ

1 голос
/ 02 июля 2019

Буквально через минуту после публикации вопроса я обнаружил проблему.Конечно же, это был не заголовок Content-Type, а заголовок Accept.Удаление, которое решило проблему.В частности, Google жаловался, что я запросил application/json в качестве типа ответа.Заголовок Accept, по-видимому, даже не требуется.

...