Я пытаюсь сделать 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.Как вы можете видеть по телу и заголовкам ошибочного ответа, мой запрос перенаправляется.
Как отладить эту ситуацию и найти решение для успешного запроса?