Чтение входящих заголовков HTTPS из ответа Spring Boot 2 с помощью node.js

Ниже в этом примере в переменной obj я получаю текст ответа. Как получить значения заголовка ответа с помощью этой библиотеки https node.js?

var options = {
    hostname: hostname,
    port: port,
    path: pathMethod,
    method: method,
    headers: {
        'Content-Type': APPLICATION_JSON,
        'Authorization': BEARER + localStorage.jwtToken
    },
    rejectUnauthorized: false,
    agent: false,
    requestCert: false

};

return new Promise(function(resolve, reject) {
var req = https.request(options, function(res) {
        res.setEncoding(ENCODING_UTF8);
        res.on('data', function(result) {

            try {
                const obj = JSON.parse(result);
                resolve({ 'httpStatus': PAGE_STATUS_200, 'result': obj });
            }
            catch(error) {
                console.error(error);
                resolve(resolve({ 'httpStatus': PAGE_STATUS_500 }));
            }

        });

        res.on('end', () => {
            console.info('No more data in response.');
        });
    });

    req.on('error', function(err) {
        console.info(`problem with request: ${err.message}`);
        reject(err);
    });

    if (postData) {
        req.write(postData);
    }

    req.end();
});

В моем браузере я получаю все необходимые заголовки. В чем может быть проблема, что я не могу получить заголовки с https node.js lib?

res.headers будет содержать заголовки ответа.
Marcos Casagrande 21.05.2018 15:52

Возможный дубликат Получение заголовков HTTP с помощью node.js

Marcos Casagrande 21.05.2018 15:52

Я пробовал использовать ваше решение, но получил только 4 параметра по сравнению с браузером Chrome, где я вижу 15 параметров (включая токен JWT). Также попробовал запрос с помощью Postman и получил те же 11 параметров в заголовке ответа. Но мне нужно получить один подходящий параметр (токен JWT), который я не могу получить с помощью https node.js lib.

alexis_di 21.05.2018 16:23

Привет всем. Вот ответ на этот вопрос. github.com/infinitered/apisauce/issues/110 и stackoverflow.com/questions/37897523/… Короче говоря, проблема была в бэкэнде Spring Boot 2.

alexis_di 05.06.2018 11:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
460
2

Ответы 2

Заголовки ответа должны быть доступны в объекте res.headers, например

// Log headers
console.info('Headers: ', res.headers);

См .: https://nodejs.org/api/https.html

например

const https = require ('https');


// This will return the IP address of the client
var request = https.request({ hostname: "httpbin.org", path: "/ip" },  (res) => {
    console.info('Headers: ', res.headers);
    res.on('data', (d) => {
        console.info('/ip response: ', d.toString());    
    });
});

// Также попробуйте использовать библиотеку запросов

var request = require('request');

var options = {
    url: "https://httpbin.org/ip",
    method: "get"
};

console.info('Requesting IP..');
request(options, function (error, response, body) {
    if (error) {
        console.error('error:', error);
    } else {
        console.info('Response: Headers:', response && response.headers);
    }
});

Такое же объяснение. Это тоже хорошо. +1 к вашему ответу. :)

Harshal Y. 21.05.2018 15:59

То же объяснение предоставлено по исходному вопросу, это явно дубликат.

Marcos Casagrande 21.05.2018 15:59

Сделал, как вы и посоветовали, но в ответ из кода пришло всего 4 параметра, против 15 в браузере. В моем случае мне нужны все параметры.

alexis_di 21.05.2018 16:02

Вы пробовали использовать curl для этой цели? например curl -v URL (curl httpbin.org/ip -v). Удивительно, что мы получаем меньше заголовков при вызове одного и того же url из двух разных источников. Не могли бы вы показать нам заголовки, которые вы получаете в браузере и node.js?

Terry Lennox 21.05.2018 16:04

Я отправил запрос с помощью Postman и получил те же 11 параметров в заголовке ответа. Но мне нужно получить как минимум эти 11 параметров из кода, используя https node.js lib.

alexis_di 21.05.2018 16:15

Я почти предлагаю зарегистрировать ошибку для этого, похоже, у вас есть воспроизводимый случай.

Terry Lennox 21.05.2018 16:34

Вы пробовали использовать для этого библиотеку запросов в node.js? Вы получите такой же ответ.

Terry Lennox 21.05.2018 16:35

Заголовки можно получить в модуле https.

Вот как вы получаете заголовки для ответа.

res.headers

Я обновил ваш код в примере ниже:

    var req = https.request(options, function(res) {
    res.setEncoding(ENCODING_UTF8);
    res.on('data', function(result) {

    console.info("Headers: ", res.headers);

    // Your code here.

    });

    res.on('end', () => {
    // Do something here.
    });
});

Надеюсь это поможет.

Спасибо за ответ. Я пробовал использовать ваше решение, но получил только 4 параметра по сравнению с браузером Chrome, где я вижу 15 параметров (включая токен JWT). Также попробовал запрос с помощью Postman и получил те же 11 параметров в заголовке ответа. Но мне нужно получить один подходящий параметр (токен JWT), который я не могу получить с помощью https node.js lib.

alexis_di 21.05.2018 16:24

Что именно вы хотите от заголовков?

Harshal Y. 21.05.2018 16:40

Я хочу получить один необходимый параметр (токен JWT) из заголовка ответа, используя https node.js lib. Но я получаю 4 ненужных параметра в заголовке ответа, используя https node.js lib. Когда я использую Postman, я получаю все параметры, включая необходимый параметр (токен JWT). Как я могу получить все параметры или только один необходимый параметр (токен JWT) с помощью https node.js lib?

alexis_di 21.05.2018 16:45

Как токен JWT в заголовке res? Он должен быть в заголовке запроса

Harshal Y. 21.05.2018 16:57

Да, токен JWT также находится в заголовке запроса на передней стороне. Также в заголовке ответа помещается токен JWT на стороне сервера.

alexis_di 21.05.2018 17:04

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

Harshal Y. 21.05.2018 17:08

Иногда серверной части необходимо автоматически обновить токен в случайное время и отправить его на передний план. Фронтенд должен сохранять и хранить токен при каждом вызове отдыха. Нет лучшего места, чем заголовки ответов. Добавление соответствующего токена к каждому внутреннему объекту, производящему json, не является идеальной практикой.

alexis_di 22.05.2018 13:50

Другие вопросы по теме