HTTP-клиент Meteor Call Call Gzip распаковка результирующего JSON не работает - PullRequest
0 голосов
/ 11 июня 2018

Я не знаю, точная ли это проблема, но насколько я понимаю, это так.Я делаю внешний вызов API с помощью HTTP.call и пытаюсь проанализировать ответ как JSON (который он есть), но я получаю странное возвращаемое содержимое, которое я считаю содержимым Gzipped.Я устанавливаю для параметра npmRequestOptions для gzip значение true, но он по-прежнему возвращает то же содержимое.

Вот мой код:

var result;
try {
  result = HTTP.call('GET', 'http://{URL}', {
    params: {
      key: '{SECRETKEY}',
      att: '{ATTS}',
      out: 'json',
    },
    npmRequestOptions : {gzip : true, json: true},
    headers: {
      // "Accept": "application/json",
      'Content-Type' : 'application/json; charset=UTF-16',
      "OSLC-Core-Version": "2.0",
    },

  });

} catch (e) {
  // Got a network error, timeout, or HTTP error in the 400 or 500 range.
}

// Append data in correct experiences format.
var content = JSON.parse(result.content);

Ошибка, как показано на скриншоте: Returned content is weird in result.content

Вот заголовки ответа от вызова API, которые, кажется, указывают на то, что содержимое gzip-файла:

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
CF-RAY: 4291c15b957d4d88-PER
Content-Encoding: gzip
Content-Type: application/json; charset=utf-16
Date: Mon, 11 Jun 2018 05:42:36 GMT
ETag: W/"863e-ylc8HuIAiQAynP7anYY1GA"
Server: cloudflare
Vary: Origin, Accept-Encoding
X-Powered-By: Express

Я считаю, что npmRequestOptions: {gzip: true,json: true} должен работать, но это не так.Дополнительной информации нет, и я искал весь день.

1 Ответ

0 голосов
/ 14 июня 2018

Итак, я выяснил, что решение этой проблемы не в самом приложении Meteor, а в возвращаемом контенте.Ответ UTF-16LE, поэтому мне пришлось удалить специальные символы из ответа, чтобы я мог JSONify его.

result = result.content.replace(/[^A-Za-z0-9{}@&:\-_() /\\"=[\],.?!]/g, '')
...