带有节点的xml Soap请求

时间:2018-10-15 08:32:51

标签: node.js xml api express soap

我想使用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>
        */

});

0 个答案:

没有答案