#node.js #rest
#node.js #rest
Вопрос:
это запрос, который я хочу выполнить:
POST /v1/oauth2/token HTTP/1.1
Host: api.sandbox.paypal.com
Accept: application/json
Accept-Language: en_US
Authorization: Basic cGF5cGFsaWQ6c2VjcmV0
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
Я попробовал это в nodejs, используя этот код:
paypalSignIn = function(){
var username = process.env.PAYPALID;
var password = process.env.PAYPALSECRET;
var auth = 'Basic ' Buffer.from(username ':' password).toString('base64');
// new Buffer() is deprecated from v6
// auth is: 'Basic VGVzdDoxMjM='
var post_data = querystring.stringify({
'grant_type' : 'client_credentials',
});
var header = {'Accept': 'application/json', 'Authorization': auth, 'Accept-Language': 'en_US'};
const options = {
hostname: 'api.sandbox.paypal.com',
port: 443,
path: '/v1/oauth2/token',
method: 'POST',
headers: header,
}
var post_req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' chunk);
});
});
post_req.write(post_data);
post_req.end();
}
К сожалению, я получаю следующую ошибку:
Ошибка: зависание сокета
Ответ №1:
Попробуйте использовать https
модуль (недостаточно установить порт 443, вы должны использовать протокол HTTPS для подключения к конечной точке HTTPS).
Я также заметил, что вы не установили Content-Type
заголовок. Это зависит от API, но это может вызвать проблемы и у вас.
Наконец, я бы подумал об использовании библиотеки, которая обертывает http
/ https
например, node-fetch, bent или axios для этого, а не напрямую стандартной библиотеки. Он может обрабатывать такие вещи, как запись в сокет, установка Content-Length
заголовка и т.д.