2014-10-23 5 views
2

Я действительно схожу с ума, глядя на это через Интернет и stackoverflow. Другие сообщения по этой теме говорят о http-запросе, а не httpS.https request basic authentication node.js

я кодирования на стороне сервера с Node.js и мне нужно сделать запрос HTTPS на другой сайт для входа в систему

Если я использую почтальона инструмент в хроме, пытаясь с https://user:[email protected]/esse3/auth/Logon.do все работает отлично, и я войти.

Если я использую библиотеку запросов в узле, я не могу войти в систему, и я получаю страницу с настраиваемым сообщением об ошибке в моих данных для получения/отправки.

Возможно, я ошибаюсь, задавая параметры для передачи запроса.

var request = require('request'); 
var cheerio = require('cheerio'); 
var user = 'xxx'; 
var pass = 'yyy'; 
var options = { 
    url : 'https://webstudenti.unica.it', 
    path : '/esse3/auth/Logon.do', 
    method : 'GET', 
    port: 443, 
    authorization : { 
     username: user, 
     password: pass 
    } 
} 

request(options, function(err, res, html){ 
    if(err){ 
     console.log(err) 
     return 
    } 
    console.log(html) 
    var $ = cheerio.load(html) 
    var c = $('head title').text(); 
    console.log(c); 
}) 

http://jsfiddle.net/985bs0sc/1/

+0

РЕШЕНИЕ. После разговора с Mikeal и Nylen, автором пакета Request and Request-Debug, было обнаружено, что в объекте options отсутствовали два параметра: Jar: request.jar() для обработки cookie, потому что сервер ожидал JSESSIONID и заголовок «User-Agent» – mammuthone

+0

Привет, у меня есть то, что, по моему мнению, является той же проблемой, можете ли вы подробнее рассказать о том, что вы сделали для решения этой проблемы? –

+0

Привет @ChrisTopher. Я кодировал бэкэнд, а бэкэнд состоит из скребка. Скребок, закодированный в Node.Js, делает http-запрос серверу, который требует базовой аутентификации. Чтобы получить правильную DOM в ответ от сервера, я написал следующее: – mammuthone

ответ

2

HTTP/HTTPS не должно быть разницы в подлинности. Скорее всего, ваш пользователь/пропуск должен быть закодирован base64. Попробуйте

var user = new Buffer('xxx').toString('base64'); 
var pass = new Buffer('yyy').toString('base64'); 

См: https://security.stackexchange.com/questions/29916/why-does-http-basic-authentication-encode-the-username-and-password-with-base64

4

Вы не устанавливая ваш http auth options правильно (а именно authorization вместо этого следует auth). Он должен выглядеть так:

var options = { 
    url: 'https://webstudenti.unica.it', 
    path: '/esse3/auth/Logon.do', 
    method: 'GET', 
    port: 443, 
    auth: { 
     user: user, 
     pass: pass 
    } 
} 
+6

Использование 'auth' не сработало для меня. То, что работало, было '' 'headers: { 'Authorization': 'Basic' + new Buffer (имя пользователя + ':' + passw) .toString ('base64') }' '', см. Http: //server.dzone .com/articles/nodejs-call-https-basic –

+0

@ JakubHolý Человек благодарит тонну !! – user1707141