Установить referer в node-fetch

#javascript #node.js #typescript

#javascript #node.js #typescript

Вопрос:

У меня есть следующий фрагмент кода, который выполняется в браузере:

 getCountries(): Promise<ICountry[]> {
    return fetch(options.baseUrl   "/countries", {
        headers: {
            Apikey: options.apiKey,
            Referer: options.referer
        }
    }).then(res => res.json())
}
 

Это работает абсолютно нормально: я получаю результат JSON обратно.

Но если я сделаю это точно так же, или я предполагаю эквивалентный код, в node.js с node-fetch помощью I я получаю 401 код состояния из точки API.

Эта выборка выполняется в node.js

 import fetch from "node-fetch"
getCountries(): Promise<ICountry[]> {
    return fetch(options.baseUrl   "/countries", {
        headers: {
            Apikey: options.apiKey,
            Referer: options.referer
        }
    }).then(res => res.json())
}
 

Я предполагаю, что есть проблема с Referer тем, когда я пытаюсь выполнить выборку с сервера на сервер.

Можно ли изменить реферер вручную?

Также в их документации говорится, что из-за природы nodejs referrer не реализован

https://github.com/node-fetch/node-fetch#class-request

Комментарии:

1. 401 означает несанкционированный, который не должен быть вызван неправильным (или отсутствующим) реферером. Скорее всего, ваш ключ api неверен или отсутствует какой-либо другой Authentication заголовок.

2. @Bergi спасибо. но я уверен, что это реферер, поскольку он является частью аутентификации. Для аутентификации мне нужен ключ API, который, я уверен, действителен, и referer. Я предполагаю, что в браузере реферер находится www.mydomain.com только в node.js на самом деле это IP-адрес сервера, а не домен

3. Обратите внимание, что класс node-fetch Request , не имеющий .referrer свойства, не препятствует отправке заголовка вручную. Это просто означает, что они не могут автоматически устанавливать его при создании нового Request , поскольку node.js не имеет контекста просмотра.

4. Попробуйте использовать http-прокси для отладки того, какие заголовки фактически отправляет nodejs (и сравните их с рабочим запросом из вашего браузера). Также обратите внимание, что обычный браузер отправляет намного больше, чем только эти два, возможно, API ожидает чего-то другого.

5. Возможно, конечно, но совершенно не нужно. Сначала попробуйте посмотреть в инструментах разработки браузера, какие заголовки он точно отправляет (возможно, с учетом регистра), и реплицируйте все из них.