@TempUserMain

Авторизация при использовании модуля «request» в Node.js

Имеется локальный сервер TeamCity.

Требуется получить информацию со внутренней страницы сервера.

Для получения информации используется модуль request для Node.js :

var fs = require('fs')
var request = require('request');

request.get('адрес сервера>/login.html').auth('<корректный логин>', '<корректный пароль>', false);

request('<адрес интересующей страницы>').pipe(
    fs.createWriteStream('<txt-файл, в который записывается текст с рассматриваемой страницы>')
)

Тем не менее, при запуске кода в txt-файл записывается ошибка:
" "Authorization" header is not specified
To login manually go to "/login.html" page "

Подскажите, пожалуйста, как решить проблему?
  • Вопрос задан
  • 5712 просмотров
Решения вопроса 2
@buzzi888
Посмотрите как сделана авторизация здесь:
github.com/gogobot/teamcity-radiator/blob/master/t...

var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64');
  
var request = client.request('GET', "/httpAuth/app/rest" + path, {'host': base_url, 'Authorization': auth});
Ответ написан
@TempUserMain Автор вопроса
buzzi888
В приведенной ссылке устаревшая форма, более не используемая.

При измении кода на:
var options = {
    host: '<адрес сервера>',
    path: '<путь до интересующей страницы>',
    auth: '<логин>:<пароль>'
};

http.get(options,function(response){

    var pageData = "";

    response.on('data', function (chunk) {
        pageData += chunk;
    });
    
    response.on('end', function(){
        res.write(pageData);
        res.end();
    });

});


Появляется ошибка:
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: getaddrinfo ENOTFOUND
    at errnoException (dns.js:37:11)
    at Object.onanswer [as oncomplete] (dns.js:124:16)

В чем может быть причина ошибки?

UPD:

Проблема решена.

Адрес сервера начинался с "http://".
Для корректного выполнения кода необходимо в адресе сервера убирать "http://"

UPD_2:

Возможно подскажите, как перенаправить ответ на запрос в файл?

Ранее в Node..JS для это использовалось:
request('<адрес интересующей страницы>').pipe(
    fs.createWriteStream('<txt-файл, в который записывается текст с рассматриваемой страницы>');


UPD_3:

Авторизация для модуля request:

var options = {
    uri: '<адрес интересующей страницы>',
    auth: { 'user':'<логин>', 'password':'<пароль>' }
};

request(options, callback)

Тем не менее, все еще не знаю, как реализовать метод callback для перенаправления информации со страницы в файл.

UPD_4:

Вопрос решен.

Для авторизации и получения информации со страницы необходимо использовать:

var options = {
    uri: '<адрес, начинающийся с http://, https:// или другого>',
    auth: { 'user':'<логин>', 'password':'<пароль>' }
};

function callback(error, response, body) {
     if (!error && response.statusCode == 200) {

         fs.writeFile('<файл, в который выводится информация>', body, function (err) {
             if (err) throw err;
         });

     }
     else {
        console.log("Error: " + error);
     }
 }

var req = request(options, callback);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы