#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
не реализован
Комментарии:
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. Возможно, конечно, но совершенно не нужно. Сначала попробуйте посмотреть в инструментах разработки браузера, какие заголовки он точно отправляет (возможно, с учетом регистра), и реплицируйте все из них.