如何使用jsc-android 224109.x.x从React Native 0.56发出正确的SOAP请求?

时间:2018-09-26 23:12:44

标签: ajax react-native soap node-soap

我正在尝试向SOAP服务器发出Ajax请求。

我正在使用没有Expo(使用本机代码构建)和TypeScript的React Native。

我使用带有棉花糖Intel x64映像的Android虚拟设备测试了结果。

当我运行最新的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);

我得到了正确的答复:

<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>

通过在node-soap上使用browserify并在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获得),因为一个标头无法在Chromes Network Panel中观察React Native Ajax请求)

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使用的请求默认标头。如您从错误响应的正文和标头中看到的,我的请求被重定向了。

如何调试这种情况并获得成功请求的解决方案?

0 个答案:

没有答案