Запрос возвращает недопустимый или несуществующий Content-Type, даже если я поместил content-type в заголовок - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь создать управляемую приложением корзину, но сталкиваюсь с ошибкой: Invalid or nonexistent Content-Type, accepted values are {text/json, application/json}

Я использую node.js и пакет запроса-обещания.Ошибка сбивает меня с толку, потому что я устанавливаю content-type в заголовках запроса на application/json.

Вот моя функция, которая делает запрос:

let globalOptions = {
    resolveWithFullResponse: true
};
function createAppManagedBucket(){
    let forgeToken = "eyJhb..."
    const options = Object.assign({}, globalOptions, {
        method: 'POST',
        uri: `https://developer.api.autodesk.com/oss/v2/buckets`,
        headers: {
            "Content-Type": "application/json",
            'User-Agent': 'Request-Promise' 
        },
        form: {
            "bucketKey": `someTestBucket`,
            "policyKey": `transient`
        },
        auth: {
            'bearer': forgeToken
        },
        json: true
    })
    return rp(options)
    .then((response) => {
        return response.body
    }).catch((err) => {
        return err
    })
}

Кажетсякак будто я установил Content-Type: application/json в заголовке, мой запрос должен иметь Content-Type: application/x-www-form-urlencoded.Если я запишу ответ на этот вопрос, то получу сообщение об ошибке, и похоже, что мой запрос действительно верный, поскольку это мои заголовки:

rawHeaders:
[ 'Access-Control-Allow-Headers',
'Authorization, Accept-Encoding, Range, Content-Type',
'Access-Control-Allow-Methods',
'GET',
'Access-Control-Allow-Origin',
'*',
'Content-Type',
'application/json; charset=utf-8',
'Date',
'Tue, 09 Apr 2019 15:58:07 GMT',
'Strict-Transport-Security',
'max-age=31536000; includeSubDomains',
'Content-Length',
'99',
'Connection',
'Close' ],

Но далее в запросе я вижу

_header: 'POST /oss/v2/buckets HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser e\r\nhost: developer.api.autodesk.com\r\nauthorization: Bearer eyJhb...\r\naccept: application/json\r\ncontent-length: 43\r\nConnection: close\r\n\r\n'

Где я вижу, что content-type фактически меняется на application/form_urlencoded Так что, похоже, мой content-type вынужден использовать что-то отличное от того, что я установил в заголовке.Кто-нибудь сталкивался с чем-то подобным раньше?

1 Ответ

1 голос
/ 09 апреля 2019

Из документации request опции ,

form - при передаче объекта или строки запроса это устанавливает body в представление значения строки запроса,и добавляет Content-type: application/x-www-form-urlencoded header.Если параметры не переданы, возвращается экземпляр FormData (и передается по запросу).См. Раздел «Формы» выше.

Нельзя смешивать параметры запроса json и form, как вы делаете, если тип содержимого не является двусмысленным

...