Javascript 如何在节点中正确提交XML post请求?

Javascript 如何在节点中正确提交XML post请求?,javascript,node.js,xml,post,Javascript,Node.js,Xml,Post,我编写了以下代码来提交post请求。服务器需要XML格式的请求。我不断收到回复操作失败,消息为无法使用内容类型。我遵循了API文档中提供的确切xml格式。你能帮我解释一下我做错了什么吗 var request = require('request'); var crypto = require('crypto'); var xml = require('xml'); var express = require("express"); var app = express(); var utctim

我编写了以下代码来提交post请求。服务器需要XML格式的请求。我不断收到回复操作失败,消息为无法使用内容类型。我遵循了API文档中提供的确切xml格式。你能帮我解释一下我做错了什么吗

var request = require('request');
var crypto = require('crypto');
var xml = require('xml');
var express = require("express");
var app = express();
var utctime = new Date().toISOString()

var login = [SENSITIVE DATA];
var password = [SENSITIVE DATA];
var requestId = [SENSITIVE DATA];
var ownTaxNumber = [SENSITIVE DATA];
var searchedTaxNumber = [SENSITIVE DATA];
var signingKey = [SENSITIVE DATA];
var softwareId = [SENSITIVE DATA];

var hash = crypto.createHash('sha512');
data = hash.update(password, 'utf-8');
var hashPassword = data.digest('hex').toUpperCase();
var hash = crypto.createHash('sha512');
data = hash.update(requestId + utctime + signingKey, 'utf-8');
var requestSignature = data.digest('hex').toUpperCase();

var reqbody = '';
reqbody = reqbody + '<?xml version="1.0" encoding="UTF-8"?>';
reqbody = reqbody + '<QueryTaxpayerRequest xmlns="http://example.com/OSA/1.0/api">';
reqbody = reqbody + '<header>';
reqbody = reqbody + '<requestId>' + requestId + '</requestId>';
reqbody = reqbody + '<timestamp>' + utctime + '</timestamp>';
reqbody = reqbody + '<requestVersion>1.1</requestVersion>';
reqbody = reqbody + '<headerVersion>1.0</headerVersion>';
reqbody = reqbody + '</header>';
reqbody = reqbody + '<user>';
reqbody = reqbody + '<login>' + login + '</login>';
reqbody = reqbody + '<passwordHash>' + hashPassword + '</passwordHash>';
reqbody = reqbody + '<taxNumber>' + ownTaxNumber + '</taxNumber>';
reqbody = reqbody + '<requestSignature>' + requestSignature + '</requestSignature>';
reqbody = reqbody + '</user>';
reqbody = reqbody + '<software>';
reqbody = reqbody + '<softwareId>' + softwareId + '</softwareId>';
reqbody = reqbody + '</software>';
reqbody = reqbody + '<taxNumber>' + searchedTaxNumber + '</taxNumber>';
reqbody = reqbody + '</QueryTaxpayerRequest>';

console.log(reqbody);

request.post('https://example.com/invoiceService/queryTaxpayer', function (error, response, body) {
    response.headers['content-type'] = 'application/xml';
    response.body = xml(reqbody);
    if(error){
        console.log("Something went wrong!")
        console.log(error);
        console.log(body);
    } else{
        console.log(body);
        console.log(response.statusCode);
        console.log(error);
    }
});
var request=require('request');
var crypto=require('crypto');
var xml=require('xml');
var express=要求(“快递”);
var-app=express();
var utctime=new Date().toISOString()
var login=[敏感数据];
var密码=[敏感数据];
var requestId=[敏感数据];
var ownTaxNumber=[敏感数据];
var searchedTaxNumber=[敏感数据];
var signingKey=[敏感数据];
var softwareId=[敏感数据];
var hash=crypto.createHash('sha512');
data=hash.update(密码“utf-8”);
var hashPassword=data.digest('hex').toUpperCase();
var hash=crypto.createHash('sha512');
data=hash.update(requestId+utctime+signingKey,'utf-8');
var requestSignature=data.digest('hex').toUpperCase();
var reqbody='';
reqbody=reqbody+“”;
reqbody=reqbody+“”;
reqbody=reqbody+“”;
reqbody=reqbody+“”+requestId+“”;
reqbody=reqbody+''+utctime+'';
reqbody=reqbody+1.1';
reqbody=reqbody+1.0';
reqbody=reqbody+“”;
reqbody=reqbody+“”;
reqbody=reqbody+“”+登录+“”;
reqbody=reqbody+''+hashPassword+'';
reqbody=reqbody+“”+ownTaxNumber+“”;
reqbody=reqbody+“”+requestSignature+“”;
reqbody=reqbody+“”;
reqbody=reqbody+“”;
reqbody=reqbody+“”+softwareId+“”;
reqbody=reqbody+“”;
reqbody=reqbody+“”+searchedTaxNumber+“”;
reqbody=reqbody+“”;
控制台日志(reqbody);
请求.邮寄('https://example.com/invoiceService/queryTaxpayer,函数(错误、响应、正文){
headers['content-type']='application/xml';
response.body=xml(reqbody);
如果(错误){
log(“出了问题!”)
console.log(错误);
控制台日志(主体);
}否则{
控制台日志(主体);
console.log(响应.状态码);
console.log(错误);
}
});

请对我好一点,即使我犯了一个愚蠢的错误。这是我在节点中的第一个项目。:)

您需要将数据和头作为请求的一部分传递,而不是在响应上传递

request.post({
  headers: { 'Content-Type': 'application/xml' },
  url: link,
  body: reqbody,
}, function(error, response, body){
  console.log(body);
});
另外,您不需要对XML请求正文进行双重编码—您自己正在(可能很危险地)对XML进行编码,因此无需调用
XML(reqbody)