Вызов XML API не работает с последней версией cordova-plugin-advanced-http в ionic3 - PullRequest
0 голосов
/ 08 октября 2018

Я использую плагин cordova-plugin-advanced-http для вызова API и все JSON API работают нормально, но у меня есть один XML встроенный API, который работает нормально в Postman, но пока я вызываю его из ionic, его параметр не доходит доконец сервера.

Ниже приведен мой код для XML API:

Тип 1:

let headers = {
          "Content-type": 'text/xml; charset=utf-8',
          "Authorization": token,
        };

    let xmlBody =
      '<ServiceRequest>' +
      '<CaseNumber>' + caseNumber +
      '</CaseNumber>' +
      '</ServiceRequest>'

    this.httpPlugin.setDataSerializer('utf8');

    this.httpPlugin.post('https://test.com/Service', xmlBody, headers).then((response) => {
      console.log("XML Response : ", JSON.stringify(response.data));
      xml2js.parseString(response.data, function (err, result) {
        console.log("XML parser success:", result);
        console.log("XML parser error:", err);
        if (result) {
          resolve(result);
        } else {
          reject(err);
        }

      });
    }).catch(error => {
      if (error.status == 403) {
        console.log("Token expired : " + JSON.stringify(error));
      } else {
        console.log("Error : " + error.error);
        console.log("Error " + JSON.stringify(error));
        reject(error);
      }
    });

Введите 2:

    let xmlBody = '<ServiceRequest>' +
      '<CaseNumber>' + caseNumber +
      '</CaseNumber>' +
      '</ServiceRequest>';

    console.log("XML Body", xmlBody)

    // this.httpPlugin.setRequestTimeout(60);
    this.httpPlugin.setDataSerializer('utf8');

    this.httpPlugin.setHeader('*', 'authorization', token);
    this.httpPlugin.setHeader('*', 'Content-Type', "application/x-www-form-urlencoded");

    this.httpPlugin.post('https://test.com/Service', xmlBody, {}).then((response) => {
      console.log("XML Response : ", JSON.stringify(response.data));
      xml2js.parseString(response.data, function (err, result) {
        console.log("XML parser success:", result);
        console.log("XML parser error:", err);
        if (result) {
          resolve(result);
        } else {
          reject(err);
        }

      });

    }).catch(error => {
      if (error.status == 403) {
        console.log("Token expired : " + JSON.stringify(error));
      } else {
        console.log("Error : " + error.error);
        console.log("Error " + JSON.stringify(error));
        reject(error);
      }

    });

Все время с его ошибкой выдачи с сервера и по одному и тому же запросу я могу получать данные как в почтальоне, так и в собственном коде iOS.

Я упомянул эту проблему на GitHub, но все еще безуспешно.

Что-то мне не хватает, хотя он не может получить данные на сервер.

Помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 08 марта 2019

После долгих попыток решить эту проблему, я нашел решение для очистки файлов cookie моего запроса.

В плагине http Advanced есть один способ очистки файлов cookie.

clearCookies()

Очистить все куки.

Используйте этот метод перед вызовом любого API.

Итак, что он сделает, очистит все мои куки и моя проблема, связанная со старыми куки, будетрешена таким способом.

constructor(
    public storage: Storage,
    public httpPlugin: HTTP,
    private platform: Platform
  ) {
    // enable SSL pinning
    httpPlugin.setSSLCertMode("pinned");
    //Clear old cookies
    httpPlugin.clearCookies();
  }

Вышеприведенный код решит мою проблему.

Спасибо всем за быстрое руководство и предложения.

прокомментируйте это, если это не такспособ очистить мои старые данные запроса.

...