Как использовать AWS Lambda для получения веб-страницы и возврата тела и заголовков

Я пытаюсь использовать функции Lambda для получения веб-страницы, а затем возвращаю как содержимое, так и заголовки ответов. Ниже приведен мой код, который всегда возвращает «Внутреннюю ошибку сервера» при запуске Gateway API, я не понимаю, как создать объект response, похоже, что у него нет никакого документа об этом. Любое попадание высоко ценится!

const fetch = require('node-fetch');

exports.handler = async (event) => {
    // TODO implement
    let r = await fetch('http://www.google.com');
    let buffer = await r.buffer();
    const response = {
        statusCode: r.status,
        body: buffer,
        header: r.headers
    };

    return response;
};

person dovod74538    schedule 04.06.2020    source источник


Ответы (1)


Я считаю, что ваша проблема в том, что вы используете метод response.buffer(). Здесь вы должны использовать метод response.text(). Он вернет тело ответа в виде простого текста. И поскольку заголовки, которые вы получаете из ответа, уже включают заголовок Content-Type: text/html, вы должны иметь возможность вернуть html-документ.

person chjweb    schedule 04.06.2020
comment
Спасибо за вашу помощь. Изменение его на text() действительно возвращает HTML-документ, но я хотел вернуть типы контента, не ограничивающиеся только text/html. Я обнаружил, что что-то не так со строкой header: r.headers, так как возвращенный ответ не включает в себя заголовок, возвращенный из выборки. - person dovod74538; 05.06.2020
comment
Хорошо, я вижу. Возможно, значения заголовков, возвращенные из response.headers, являются массивами. Если вам нужен только заголовок content-type, вы можете использовать response.headers.get("content-type"). - person chjweb; 05.06.2020
comment
Что ж, при дальнейшем тестировании кажется, что я не могу поставить buffer в качестве значения body, всякий раз, когда я это делаю, он возвращает внутреннюю ошибку сервера, интересно, случайно ли вы не знаете причину. Спасибо! - person dovod74538; 05.06.2020
comment
Я нашел это сам, похоже, мне все равно нужно возвращать строки, но я могу дать команду шлюзу API обрабатывать данные как двоичные: stackoverflow.com/questions/45348580/ - person dovod74538; 05.06.2020