Как сделать правильный SOAP-запрос от React Native 0.56 с помощью jsc-android 224109.xx? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь сделать Ajax-запрос к SOAP-серверу.

Я использую React Native без Expo (сборка с собственным кодом) и TypeScript.

Я тестирую результаты с AndroidВиртуальное устройство с образом зефира Intel x64.

Когда я запускаю последнюю версию Chrome с

chromium-browser %U --disable-web-security --user-data-dir="/home/user/.config/chromium"

и запускаю эти команды в консоли Chrome (*):

window.body = '<?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:tns="http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01">' +
  '<soap:Body>' +
  '<NIP xmlns="http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01">' +
  '<NIP>8960005673</NIP>' +
  '</NIP>' +
  '</soap:Body>' +
  '</soap:Envelope>';

window.headers = new Headers({
  Accept: 'text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8',
  SOAPAction: "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01/WeryfikacjaVAT/SprawdzNIP",
  'Content-Type': 'text/xml; charset=utf-8',
});

fetch("https://sprawdz-status-vat.mf.gov.pl/",
  {
    headers: window.headers,
    credentials: "include",
    referrer: "http://localhost:1234/",
    referrerPolicy: "no-referrer-when-downgrade",
    body: window.body.replace(/\n/g, ''),
    method: "POST",
    mode: "cors"
  }).then(_=>_.text()).then(console.log);

Iполучить правильный ответ:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <WynikOperacji xmlns="http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01">
            <Kod>C</Kod>
            <Komunikat>Podmiot o podanym identyfikatorze podatkowym NIP jest zarejestrowany jako podatnik VAT czynny
            </Komunikat>
        </WynikOperacji>
    </s:Body>
</s:Envelope>

Извлечь параметры, заголовки и конверт, которые я получил с помощью browserify на node-soap и запустив его так в Chrome:

const test = (async (NIP) => {
  const client = await soap.createClientAsync('https://sprawdz-status-vat.mf.gov.pl/?wsdl', {});
  const params = {NIP};
  const result = await client.SprawdzNIPAsync(params);
  const response = await result.json();
  return response;
});

Запуск того же кода(*) внутри React Native 0.56 выдает ошибку, тело которой:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Service</title>
  </head>
  <body>
    <div id="content">
      <p class="heading1">Service</p>
      <p xmlns="">There is no operation listening for <a href="http://sprawdz-status-vat.mf.gov.pl/WebFiles/WeryfikacjaVAT.wsdl">http://sprawdz-status-vat.mf.gov.pl/WebFiles/WeryfikacjaVAT.wsdl</a>, but there is an operation listening for <a href="http://sprawdz-status-vat.mf.gov.pl/WebFiles/WeryfikacjaVAT.wsdl/">http://sprawdz-status-vat.mf.gov.pl/WebFiles/WeryfikacjaVAT.wsdl/</a>, so you are being redirected there.</p>
    </div>
  </body>
</html>

и заголовки ответа (получаются из console.log (request.headers), потому что просто невозможно наблюдать запросы React Native Ajax вПанель Chromes Network)

connection: "Keep-Alive"
content-length: "1957"
content-type: "text/html; charset=UTF-8"
date: "Wed, 26 Sep 2018 22:58:12 GMT"
keep-alive: "timeout=3, max=10000"
location: "http://sprawdz-status-vat.mf.gov.pl/WebFiles/WeryfikacjaVAT.wsdl/"
server: "Microsoft-HTTPAPI/2.0"

Я не знаю, как получить заголовки запроса по умолчанию, используемые React Native.Как вы можете видеть по телу и заголовкам ошибочного ответа, мой запрос перенаправляется.

Как отладить эту ситуацию и найти решение для успешного запроса?

...