我想使用Node执行肥皂请求
POST /booking/booking.asmx
HTTP/1.1
Host: www.example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<showModuleType xmlns="http://example.es/">
<user>string</user>
<password>string</password>
</showModuleType>
</soap12:Body>
</soap12:Envelope>
获得这样的响应
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<showModuleTypeResponse xmlns="http://exmaple.es/">
<showModuleTypeResult>xml</showModuleTypeResult>
</showModuleTypeResponse>
</soap12:Body>
</soap12:Envelope>
我尝试了以下软件包,但无法获得需求回复
当前,我正在使用一些天气API,该API不是免费的,无法正常运行。但是代码仍然存在问题,API代码以及预期的请求和响应如下所示
router.get('/try', function(req, res) {
var os = require('os');
if (os.platform() == 'win32') {
var chilkat = require('chilkat_node10_win32');
} else if (os.platform() == 'linux') {
if (os.arch() == 'arm') {
var chilkat = require('chilkat_node10_arm');
} else if (os.arch() == 'x86') {
var chilkat = require('chilkat_node10_linux32');
} else {
var chilkat = require('chilkat_node10_linux64');
}
} else if (os.platform() == 'darwin') {
var chilkat = require('chilkat_node10_macosx');
}
// Demonstrates how to do a SOAP request using the REST API.
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
var rest = new chilkat.Rest();
// This is the request to be sent:
/*
POST /WeatherWS/Weather.asmx HTTP/1.1
Host: wsf.cdyne.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetCityWeatherByZIP xmlns="http://ws.cdyne.com/WeatherWS/">
<ZIP>string</ZIP>
</GetCityWeatherByZIP>
</soap:Body>
</soap:Envelope>
*/
// Note: The application does not need to set the Host or Content-Length headers.
// Chilkat will automatically add these headers.
// Make the initial connection (without sending a request yet).
var bTls = false;
var port = 80;
var bAutoReconnect = true;
// In this particular case, it is important to connect to "wsf.cdyne.com", not "ws.cdyne.com"...
var success = rest.Connect("wsf.cdyne.com", port, bTls, bAutoReconnect);
if (success !== true) {
console.log(rest.LastErrorText);
res.json("This example is correct in theory, but no longer works for live testing because the SOAP service provider (cdyne.com) has made changes or discontinued the free service.")
return;
}
// Add request headers:
success = rest.AddHeader("Content-Type", "text/xml; charset=utf-8");
success = rest.AddHeader("SOAPAction", "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP");
// Build the SOAP XML request body.
var soapXml = new chilkat.Xml();
soapXml.Tag = "soap:Envelope";
success = soapXml.AddAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
success = soapXml.AddAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
success = soapXml.AddAttribute("xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/");
soapXml.NewChild2("soap:Body", "");
success = soapXml.GetChild2(0);
soapXml.NewChild2("GetCityWeatherByZIP", "");
success = soapXml.GetChild2(0);
success = soapXml.AddAttribute("xmlns", "http://ws.cdyne.com/WeatherWS/");
soapXml.NewChild2("ZIP", "60187");
soapXml.GetRoot2();
console.log(soapXml.GetXml());
// Send the SOAP request
var responseXml = rest.FullRequestString("POST", "/WeatherWS/Weather.asmx", soapXml.GetXml());
if (rest.LastMethodSuccess !== true) {
console.log(rest.LastErrorText);
return;
}
// When successful, the response status code will equal 200.
if (rest.ResponseStatusCode !== 200) {
// Examine the request/response to see what happened.
console.log("response status code = " + rest.ResponseStatusCode);
console.log("response status text = " + rest.ResponseStatusText);
console.log("response header: " + rest.ResponseHeader);
console.log("response body (if any): " + responseXml);
console.log("---");
console.log("LastRequestStartLine: " + rest.LastRequestStartLine);
console.log("LastRequestHeader: " + rest.LastRequestHeader);
return;
}
var xml = new chilkat.Xml();
success = xml.LoadXml(responseXml);
// GetXml will emit XML that is nicely indented for human viewing..
console.log(xml.GetXml());
// A sample response XML is shown below...
// To get some information, use ChilkatPath. For example...
console.log("Temperature: " + xml.ChilkatPath("soap:Body|GetCityWeatherByZIPResponse|GetCityWeatherByZIPResult|Temperature|*"));
console.log("Success.");
/*
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
<GetCityWeatherByZIPResult>
<Success>true</Success>
<ResponseText>City Found</ResponseText>
<State>IL</State>
<City>Wheaton</City>
<WeatherStationCity>West Chicago</WeatherStationCity>
<WeatherID>10</WeatherID>
<Description>Mostly Sunny</Description>
<Temperature>33</Temperature>
<RelativeHumidity>39</RelativeHumidity>
<Wind>VRB5</Wind>
<Pressure>30.33F</Pressure>
<Visibility />
<WindChill />
<Remarks />
</GetCityWeatherByZIPResult>
</GetCityWeatherByZIPResponse>
</soap:Body>
</soap:Envelope>
*/
});