我如何在 nodejs 中发出这个请求(状态 415)?

How can I make this request in nodejs(status 415)?

我正在使用 bash 来完成一项任务。在尝试解析响应时遇到了一些混乱。现在我正在使用 nodejs 来完成任务。但我收到以下错误:

"httpStatus" : 415,
"messages" : [ {
    "errorCode" : "305",
    "message" : "Unsupported media type 'application/x-www-form-urlencoded'"
} ]

这曾经是我在 bash 文件中的 curl 请求:

 curl --include\                      
     --request POST \                 
     --user "$USERNAME:$PASSWORD" \           
     --header "Content-Type: application/vnd.profitbricks.resource+json" \ 
     --data-binary "{             
         \"properties\": {           
             \"name\": \"$servername\",      
             \"ram\": $RAM,
             \"cores\": $CORES     
         }  
     }" \                      
     https://api.profitbricks.com/rest/datacenters/$ID/servers ;  

这是我当前的请求:

var request = require('request');
var reqoptions = {                 
  method: 'POST',             
  uri: 'https://api.profitbricks.com/rest/datacenters/'+options.vdcID+'/servers',
  form:{
     "properties":{
        "cores": options.cores,
        "ram": options.ramsize,
        "name": options.servername 
     }
  },
  headers: {               
      'Authorization': 'Basic ' + new Buffer(options.user+':'+options.password).toString('base64'),
      'Content-Type': 'application/vnd.profitbricks.resource+json'
   }
};   

request(reqoptions, function(err, res, body){});

form 选项将内容类型更改为 form-urlencoded

你不应该在请求选项中使用 form

像这里一样发送二进制数据nodejs/express and binary data in POST

所以使用 body: myBuffer 而不是 form: {...}

问题是序列化。我把对象字符串化了。现在可以了。

var request = require('request');
var body = {
     "properties":{
        "cores": options.cores,
        "ram": options.ramsize,
        "name": options.servername 
     }
  }
var reqoptions = {                 
  method: 'POST',             
  uri: 'https://api.profitbricks.com/rest/datacenters/'+options.vdcID+'/servers',
  body: JSON.stringify(body),
  headers: {               
      'Authorization': 'Basic ' + new Buffer(options.user+':'+options.password).toString('base64'),
      'Content-Type': 'application/vnd.profitbricks.resource+json'
   }
};   

request(reqoptions, function(err, res, body){});

这成功了。