NodeJS XML HTTP POST请求标头对象不接受

时间:2017-03-21 17:02:19

标签: javascript node.js xml request http-post

我正在尝试从酒店频道管理员的API获取Ping消息。 (XML开放旅游联盟)

我首先使用SoapUI-5.3.0工具发出HTTP XML POST请求,包括以下参数:

otaRQ: <OTA_PingRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="3.30" TimeStamp="2011-07-24T10:07:24" Target="Production"> <EchoData><![CDATA[Hello World!!]]> </EchoData> </OTA_PingRQ>

并收到以下XML响应:

<OTA_PingRS PrimaryLangID="en" Target="Production" TimeStamp="2017-03-21T09:43:55" Version="3.00" xmlns="http://www.opentravel.org/OTA/2003/05">
   <Success/>
   <EchoData>Hello World!!</EchoData>
</OTA_PingRS>

我在headers对象的options变量中的NodeJS中的http POST请求中包含了相同的参数。 (见下面的代码)

我仍然收到以下回复:表格后数据中缺少200“'otaRQ'!”

所以我的问题是,如何获得与SoapUI-5.3.0相同的响应?

非常感谢您的努力!

var http = require('http');

var body = '<OTA_PingRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="3.30" TimeStamp="2011-07-24T10:07:24" Target="Production"> <EchoData><![CDATA[Hello World!!]]></EchoData> </OTA_PingRQ>'

var postRequest = {
    hostname: "cultswitch.cultuzz.de",
    path: "/cultswitch/processOTA",
    method: "POST",
    port: 8080,
    headers: {
        'otaRQ': '<OTA_PingRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="3.30" TimeStamp="2011-07-24T10:07:24" Target="Production"> <EchoData><![CDATA[Hello World!!]]> </EchoData> </OTA_PingRQ>',
        'Cookie': "cookie",
        'Content-Type': 'text/xml',
        'Content-Length': Buffer.byteLength(body)
    }
};

var buffer = "";

var req = http.request( postRequest, function( res )    {

console.log( res.statusCode );
var buffer = "";
res.on( "data", function( data ) { buffer = buffer + data; } );
res.on( "end", function( data ) { console.log( buffer ); } );

});

req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});

req.write( body );
req.end();

频道管理员提供商的摘录: 数据交换将使用标准HTTP协议进行。该 请求消息应作为POST-DATA在名为'otaRQ'的参数内发送 并且回复消息将被直接写入HTTP-Response CultSwitch。 CultSwitch仅接受“text / xml”格式的请求。 CultSwitch也 支持每个请求和响应的gzip压缩。请求系统 应该设置正确的请求标头。发布任何“PrimaryLangID”是强制性的 请求CultSwitch。

2 个答案:

答案 0 :(得分:1)

我发现它需要将你的参数称为otaRQ。你还没有这样做。试试这个:

var body = 'otaRQ=<OTA_PingRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="3.30" TimeStamp="2011-07-24T10:07:24" Target="Production"> <EchoData><![CDATA[Hello World!!]]></EchoData> </OTA_PingRQ>'

答案 1 :(得分:0)

由于您的错误消息显示您缺少后期制作数据,请尝试将内容类型标题设置为&#34; application / x-www-form-urlencoded&#34;。

所以,&#39;内容类型&#39;:&#39; application / x-www-form-urlencoded&#39;,