проблемы с отправкой xml-запроса на отдых через Node.js и функцию Firebase - PullRequest
0 голосов
/ 21 января 2019

Новичок в Node.js, если кто-нибудь может подсказать мне, где я совершаю ошибку или пропустил, был бы очень признателен.

Я делаю функцию fireBase, для которой он вызывает внешний API. При запуске функции firebase я получаю ошибку ниже ..

Я понимаю, что это SOAP-сервис, но когда я выполняю тот же запрос через SOAPUI, Postman и Swift 4.0, что и REST, я получаю рабочий ответ. только узел. JS дает вопросы

<html>
   <head>
      <meta content="HTML Tidy for Java (vers. 26 Sep 2004), see www.w3.org" name="generator"/>
      <title>Bad Request</title>
   </head>
   <body>
      <h1>Bad Request</h1>
      Your browser sent a request that this server could not understand.
      <p>Reference #7.5c6775c7.1548021657.449091a5</p>
   </body>
</html>

exports.fetchClients = functions.https.onRequest((request, response) => {
    var https = require('https');
    var postData = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://clients.mindbodyonline.com/api/0_5_1"><soapenv:Header/><soapenv:Body><GetClients><Request>>........</Request></GetClients></soapenv:Body></soapenv:Envelope>`;

    const options = {
        protocol:"https:",
        hostname: 'api.mindbodyonline.com',
        path: '/0_5_1/ClientService.asmx',
        method: "POST",
        headers: {
            "Content_Type": "text/xml",
            "SOAPAction": "....",
            "API-key": "....",
            "SiteId": "...",
            "Connection":"Keep-Alive",
            "Host":"api.mindbodyonline.com",
            "Accept-Encoding":"Accept-Encoding: gzip,deflate",
        }
    };

    var req = https.request(options, function(res) {
        var responseData = "";
        console.log('STATUS: ' + res.statusCode);
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        res.setEncoding('utf8');

        res.on('data', function (chunk) {
            responseData += chunk;
        });

        res.on('end', function (chunk) {
            console.log("responseData: " + responseData);
            response.send(responseData);
        });
    });

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

    req.write(postData);
    req.end();
});

ОБНОВЛЕНИЕ !!! В названии заголовка типа контента была опечатка. Вот почему запрос не был обработан. Сейчас работает :)

До: Content_Type После: Тип контента

...