请求返回无效或不存在的Content-Type,即使我将content-type放在标头中

时间:2019-04-09 16:28:10

标签: node.js autodesk-forge request-promise

我正在尝试创建一个应用程序管理的存储桶,但遇到错误: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被迫执行除标头中设置的内容以外的其他操作。有人遇到过类似的事情吗?

1 个答案:

答案 0 :(得分:1)

request选项documentation中,

  

form-传递对象或查询字符串时,会将body设置为值的查询字符串表示形式,并添加Content-type: application/x-www-form-urlencoded header。如果不传递任何选项,则将返回FormData实例(并将其通过管道传递给请求)。请参阅上方的“表单”部分。

在内容类型不明确的情况下,您不能像您一样混合使用jsonform请求选项