我正在尝试创建一个应用程序管理的存储桶,但遇到错误:Note
Python 3 support on Android is now available experimentally.
我正在使用node.js和请求承诺包。该错误令我感到困惑,因为我正在将请求的标头中的Invalid or nonexistent Content-Type, accepted values are {text/json, application/json}
设置为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
被迫执行除标头中设置的内容以外的其他操作。有人遇到过类似的事情吗?
答案 0 :(得分:1)
在request
选项documentation中,
form
-传递对象或查询字符串时,会将body
设置为值的查询字符串表示形式,并添加Content-type: application/x-www-form-urlencoded header
。如果不传递任何选项,则将返回FormData实例(并将其通过管道传递给请求)。请参阅上方的“表单”部分。
在内容类型不明确的情况下,您不能像您一样混合使用json
和form
请求选项