0

我正在使用 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){});
4

2 回答 2

1

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

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

在 POST 中发送像nodejs/express 这样的二进制数据和二进制数据

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

于 2015-11-18T11:01:38.787 回答
1

问题是序列化。我对对象进行了字符串化。现在它起作用了。

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){});

这成功了。

于 2015-11-18T11:21:32.303 回答