Как убедиться, что заголовки, которые я передаю в запрос node-fetch, верны?

Я пытаюсь переписать одну функцию, которая выполняет запрос на получение с библиотекой запроса-обещания, чтобы она была основана на выборке узла:

Вот метод в запросе-обещании:

import { default as request } from 'request-promise';

async function sendGet(cookies, url) {
  const options = {
    method: 'GET',
    uri: url,
    headers: {
      Accept: 'text/html,application/xhtml+xml,application/xml',
      'Upgrade-Insecure-Requests': '1',
      'Accept-Encoding': 'gzip, deflate, sdch, br',
      'Accept-Language': 'en-US,en;q=0.8',
      Host: 'some.url.com',
      Connection: 'keep-alive',
      cookie: cookies,
    },
    json: true,
    resolveWithFullResponse: true,
    simple: false,
    followRedirect: false,
  };
  try {
    const response = await request(getNextOptions);
    return {
      cookies: response.headers['set-cookie'],
      location: response.headers['location'],
    };
  } catch (e) {
    throw e;
  }
}

При изменении на node-fetch в ответ выдает следующую ошибку:

«Запрошенный URL / сеанс / аутентификация / сбой не был найден на этом сервере. Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 404 Not Found».

import fetch from 'node-fetch';

async function sendGet(cookies, url) {
  const headers = {
    'Upgrade-Insecure-Requests': '1',
    'Accept-Language': 'en-US,en;q=0.8',
    Host: 'some.url.com',
    Connection: 'keep-alive',
    cookie: cookies,
  }
  try {
    const result = await fetch(url, {
      headers,
      compress: true
    });
    const body = await result.json();

    return {
      cookies: body.headers.raw()['set-cookie'],
      location: body.headers.get('location'),
    };
  } catch (e) {
    throw e;
  }

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

  1. Я не использую заголовок Accept, потому что node -fetch по умолчанию добавляет Accept: */*
  2. Вместо 'Accept-Encoding': 'gzip, deflate, sdch, br' я использую compression: true

Заранее благодарим за помощь!


person Piotr Lee    schedule 24.01.2020    source источник


Ответы (1)


Вы можете использовать что-то вроде https://requestbin.com/, чтобы проверить свой запрос.

По сути, вы создаете новый запрос BIN, а затем используете URL-адрес BIN вместо своего реального URL-адреса и видите, что вы там запрашиваете.

person dkasipovic    schedule 24.01.2020
comment
Большое спасибо за этот совет! это позволило мне сравнивать запросы, но без хоста в заголовках, потому что это не позволяло мне отправлять запрос в requestbin. Это показало, что запросы точно такие же, что заставило меня больше думать о хосте в заголовках. После его удаления я получил ошибку: максимальное перенаправление достигнуто после того, как я заметил опцию в версии запроса-обещания {followRedirect: false}, поэтому оставалось только добавить опцию в мою выборку {redirect: 'manual'} для этой решенной проблемы. Еще раз спасибо! - person Piotr Lee; 24.01.2020
comment
Хотел бы я знать корзину запросов :) - person nerkn; 20.03.2021