Я пишу приложение Node.js, которое должно запрашивать некоторые данные у одного из наших внутренних API. Сложность в том, что сервер, с которого я запрашиваю данные, имеет определенные ограничения:
- Запрос должен быть сделан по протоколу HTTPS (не HTTP)
- Запрос должен быть сделан с использованием IP-адреса локальной сети, поскольку доменное имя не будет работать внутри
- Похоже, что запрос запрашивается с внешнего имени домена, потому что именно для этого настроен виртуальный хост.
Для этого я запускаю немного кода, который выглядит следующим образом:
var headers = {
Host: externalHostname,
Hostname: externalHostname,
};
var options = {
host: InternalIP,
path: path,
method: 'GET',
headers: headers
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
var data = "";
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
//Do something with that data
});
res.on('error', function(err) {
console.log("Error during HTTP request");
console.log(err);
});
});
req.end();
К сожалению, в ответ я получаю ошибку 400 (ваш браузер отправил запрос, который не может понять этот сервер). Я дважды и трижды проверял, что имя хоста, ip-адрес и имя пути все верны (я могу проверить их из моего браузера, и все хорошо).
Я вывел свою переменную ответа (res) и получаю значение authorizationError UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Я не уверен, что это такое, или это моя проблема, но это единственная полезная информация, которую я смог найти.
Я поместил полный вывод моей переменной ответа здесь .
Есть идеи, что может быть причиной этого?
Обновление: Я разобрался! Я пытался пройти проверку подлинности на сервере, передав переменную ?PHPSESSID=asdad
GET
, но они отключили это. Я смог заставить его работать, установив PHPSESSID
в заголовке Cookie.