Mam problem podczas POSTingu do zasobu, który jest chroniony przez podstawowe uwierzytelnianie dostępu. Oto kod, którego używam @mikeal's request:

request.post({
  uri: "http://user:password@mysite.com/resource",
  json: {
    "id": "1",
    "par1": "a",
    "par2": "b"
  }
}, function (error, response, body) {
  console.log(error);
  console.log(response);
  console.log(body);
});

Mam { [Error: Parse Error] bytesParsed: 0 } w błędzie i undefined zarówno w odpowiedzi, jak i treści. Jeśli usunę część „user:password”, otrzymam poprawnie komunikat 401 HTTP Basic: Access denied.

Czy wiesz, czy istnieje sposób na POST JSON do chronionego zasobu, tak jak w moim przypadku? Jeśli nie, wierzę, że będę musiał przejść do modułu http, ale zostawiam to jako ostatni zasób, ponieważ jest o wiele bardziej szczegółowy.

AKTUALIZACJA: Aby było to jak najprostsze, przeniosłem ten plik do nowego katalogu i wykonałem npm install request. Problem zniknął, sprawdziłem, skąd pochodzi byteParsed i stwierdziłem, że jest to „ogromne”, co jest wymagane przez ekspres, który miałem w katalogu, w którym przeprowadzałem ten test. Teraz trochę zdezorientowany.

2
Alberto Zaccagni 6 marzec 2012, 21:37

2 odpowiedzi

Najlepsza odpowiedź

Musisz dodać nagłówek do swojego żądania z tymi regułami:

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

Zasadniczo musisz zakodować ciąg: nazwa użytkownika:hasło w base64 i dodać zakodowany ciąg w nagłówku http:

Autoryzacja: podstawowa „Base64(nazwa użytkownika:hasło)”

Nie wiem czy można dodać nagłówek za pomocą jquery lub javascript. Przepraszam.

Spójrz tutaj: http://api.jquery.com/extending-ajax/#Transports

2
Gianluca Tomasino 6 marzec 2012, 22:00

Zrobiłem to tak:

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
});
6
Arbie Samong 30 styczeń 2013, 14:46