【问题标题】:How can I make this request in nodejs(status 415)?如何在 nodejs(状态 415)中提出这个请求?
【发布时间】:2016-02-20 01:42:14
【问题描述】:

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

【问题讨论】:

    标签: node.js bash curl request node-request


    【解决方案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){});
    

    这成功了。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我尝试了一些变化,努力工作。请给我一点代码好吗?
      • 该死,一个简单的字符串化就可以了。我努力序列化对象。
      猜你喜欢
      • 2011-08-02
      • 2015-05-10
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      相关资源
      最近更新 更多