Подтвердить что ты не робот

Как отправить файлы cookie с помощью node -fetch?

У меня есть приложение nodejs, которое обрабатывает пользовательские запросы и получает куки файлы, которые я хочу прокси-серверу для внутреннего API-сервиса. Как подойти к этому с помощью node -fetch?

Не предлагайте суперагента.

4b9b3361

Ответ 1

Вы должны иметь возможность передавать файлы cookie, установив его в заголовке вашего запроса:

const opts = {
    headers: {
        cookie: 'accessToken=1234abc; userId=1234'
    }
};
const result = await fetch(`/some/url`, opts);

Ответ 2

Для простого, вы можете написать промежуточное программное обеспечение, которое будет включать файлы cookie в global.fetch, как показано ниже.

const realFetch = fetch;

function cookieFetch(fetch, cookie) {
  return (url, opts) => {
    opts = opts || {};
    return fetch(url, Object.assign(opts, {
      headers: Object.assign(opts.headers || {}, { cookie })
    }));
  };
}

function middleware(req, res, next) {
  const kuki = req.headers.cookie;
  global.fetch = kuki ?
    cookieFetch(realFetch, kuki) :
    realFetch;
  next();
}

module.exports = middleware;

Ответ 3

Читай и пиши куки как бот

async function login() {
  return fetch('<some_url>/login', {
      'headers': {
          'accept': '*/*',
          'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'cookie': '',,
      },
      'body': 'username=foo&password=bar',
      'method': 'POST',
  });
}

(async() => {
  const loginResponse = await login();
  const loginCookies = parseCookies(loginResponse);
})();

Вы можете включить: accept-language, user-agent, referer, accept-encoding и т.д. (Проверьте пример запроса на Chrome DevTools)

По какой-то причине результирующие файлы cookie запросов на выборку узлов не совместимы с новыми запросами, но мы можем проанализировать их следующим образом:

function parseCookies(response) {
  const raw = response.headers.raw()['set-cookie'];
  return raw.map((entry) => {
    const parts = entry.split(';');
    const cookiePart = parts[0];
    return cookiePart;
  }).join(';');
}

Передайте куки в ваших будущих запросах через те же заголовки:

  return fetch('<some_url>/dashboard', {
    'headers': {
        'accept': '*/*',
        'cookie': parsedCookies,
    },
    'method': 'GET',
  });

Ответ 4

Вам не нужно node -featch, вы можете прочитать cookie пользователей из заголовка запроса "Cookie". См. https://nodejs.org/dist/latest-v5.x/docs/api/http.html#http_message_headers

Но если вы используете кросс-доменный запрос, вы должны настроить свой запрос клиента с помощьюCredential и добавить заголовки CORS на сервере. Смотрите это: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS