2012-03-06 1 views
2

У меня возникла проблема при отправке POST на ресурс, который защищен базовой аутентификацией доступа. Вот код, я использую @mikeal's request:POST на ресурс, защищенный базовым доступом,

request.post({ 
    uri: "http://user:[email protected]/resource", 
    json: { 
    "id": "1", 
    "par1": "a", 
    "par2": "b" 
    } 
}, function (error, response, body) { 
    console.log(error); 
    console.log(response); 
    console.log(body); 
}); 

У меня { [Error: Parse Error] bytesParsed: 0 } по ошибке и undefined в обоих ответ и тела. Если я удалю часть «user: password», я правильно получу 401 HTTP Basic: Access denied.

Знаете ли вы, есть ли способ POST JSON для защищенного ресурса, как в моем случае? Если нет, я верю, что мне придется идти по модулю http-модулей, но я оставляю это как окончательный ресурс, поскольку он намного более подробный.

UPDATE: Чтобы это было как можно проще, я переместил этот файл в новый каталог и сделал npm install request. Проблема исчезла, я проверил, откуда пришел byteParsed, и нашел, что он находится в «грозном», который требуется экспресс, который у меня был в каталоге, где я запускал этот тест. Немного смущает прямо сейчас.

ответ

2

Вы должны добавить заголовок к вашей просьбе с этими правилами:

http://en.wikipedia.org/wiki/Basic_access_authentication

В основном вы должны закодировать строку: имя пользователя: пароль в base64 и добавить закодированную строку в заголовке HTTP:

Авторизация: Базовый «Base64 (имя пользователя: пароль)»

Не знаю, возможно ли добавить заголовок с jquery или javascript. Сожалею.

Посмотрите здесь: http://api.jquery.com/extending-ajax/#Transports

+0

Спасибо за ваш ответ; Я обновил свой вопрос, так как обнаружил, что перемещение кода в чистый каталог «решает» проблему. Я сказал: «решает», потому что мне нужно это в предыдущей папке, я думаю, что у меня есть проблема несовместимости. Я смотрю на то, что вы связали, наверняка кажется чем-то возможным. –

+0

Спасибо! Я решил это сделать, как вы предложили: D Странно, что это то, что я использую в библиотеке, я почти копировал решение оттуда, я рассмотрю его сегодня вечером. Еще раз спасибо. –

4

Я сделал это так:

var options = {     
    method: 'POST',    
    uri: 'http://your.url.com/', 
    form: {     
    field1: 'somevalue',    
    field2: 666.66 
    },      
    headers: {    
    'Authorization': 'Basic ' + new Buffer("username:password").toString('base64')     
    } 
};           
request(options, function(error, response, body) { 
    // do stuff 
}); 
Смежные вопросы