Распакуйте строковый ответ GZIP с сервера PHP в NodeJS

Просто для того, чтобы быть явным. Да, ошибка говорит о том, что вы не можете указывать свой браузер прямо на file://some/path/some.html

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

Python 2

Если у вас установлен Python ...

  1. Измените каталог в папку, где находится ваш файл some.html или файл (ы) существует с помощью команды cd /path/to/your/folder
  2. Запустите веб-сервер Python с помощью команды python -m SimpleHTTPServer

. Это запустит веб-сервер для размещения всего вашего каталога в списке на странице http://localhost:8000

  1. Вы можете использовать пользовательский порт python -m SimpleHTTPServer 9000, предоставляющий ссылку: http://localhost:9000

Этот подход встроен в любую установку Python.

Python 3

Выполняйте те же действия, но используйте следующую команду: python3 -m http.server

Node.js

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

  1. Установите http-server, набрав npm install -g http-server
  2. Замените ваш рабочий каталог, где ваш some.html жизни
  3. Звезда t ваш http-сервер, выпуская http-server -c-1

. Это приводит к созданию файла Node.js httpd, который обслуживает файлы в вашем каталоге как статические файлы, доступные из http://localhost:8080

Ruby

Если ваш предпочтительный язык Ruby ..., то Ruby Gods говорят, что это работает также:

ruby -run -e httpd . -p 8080

PHP

Конечно, PHP также имеет свои решение.

php -S localhost:8000
0
задан cankentcode 4 March 2019 в 06:52
поделиться

1 ответ

Это решение, которое работает для меня.

Я использовал , получил вместо axios , потому что я не могу заставить его работать там.

Я установил параметры запроса:

const requestOptions = {
    encoding: null, // this is important
    headers: {
        "Accept-Encoding": "gzip",
    }
    ...
};

Не забудьте эту строку encoding: null, потому что без этого ответ будет автоматически преобразован в строку. (Нам нужен буфер для этой работы)

Затем я создал такую ​​функцию для обработки моего запроса:

const zlib = require("zlib");

async function performRequest(url, options) {
    try {
        const response = await got(url, options);
        if (response.headers["content-encoding"] === "gzip") {
            const body = response.body;
            try {
                const dezziped = zlib.gunzipSync(response.body);
                response.body = JSON.parse(dezziped.toString());
            } catch (error) {
                response.body = body;
            }
        }
        return response.body;
    } catch (error) {
        return error;
    }
}

Примечание: Это синхронная операция вместо этого вы можете использовать gunzip, если хотите выполнить асинхронный способ.

0
ответ дан cankentcode 4 March 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: