Я пытаюсь создать корзину, управляемую приложением, но сталкиваюсь с ошибкой: Invalid or nonexistent Content-Type, accepted values are {text/json, application/json}
Я использую node.js и пакет request-promise. Эта ошибка сбивает меня с толку, потому что я устанавливаю свой 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
принудительно заменяется чем-то другим, кроме того, что я установил в заголовке. Кто-нибудь сталкивался с чем-то подобным раньше?
извините, что-то забыл удалить, но сейчас вставлю
Из вариантов request
документация,
form
- when passed an object or a querystring, this setsbody
to a querystring representation of value, and addsContent-type: application/x-www-form-urlencoded header
. When passed no options, a FormData instance is returned (and is piped to request). See "Forms" section above.
Вы не можете смешивать параметры запроса json
и form
, как вы делаете, без неоднозначности типа контента.
что такое
globalOptions
?