Вызов API с подписью NodeJS с Oauth1 не работает - PullRequest
1 голос
/ 16 января 2020

У меня проблема с моим вызовом API с использованием NodeJS. У меня нет проблем с почтальоном, но когда я запускаю его с Node, ответ сервера 401.

Вот код nodejs:

var request = require("request");

var options = { method: 'GET',
  url: 'https://api.cardmarket.com/ws/v2.0/output.json/products/find',
  qs: 
   { search: 'Salamangrande%25Loup%25Du%25Soleil',
     idGame: '3',
     idLanguage: '2' },
  headers: 
   { 'cache-control': 'no-cache',
     Connection: 'keep-alive',
     Cookie: 'PHPSESSID=m399v2el9635i3jq0e4did8f5k',
     'Accept-Encoding': 'gzip, deflate',
     Host: 'api.cardmarket.com',
     'Postman-Token': '9b19a85d-8888-4f31-8d24-fe309a55bf76,4d8f4741-4b85-4d5e-85dc-8ac43ea5f56c',
     'Cache-Control': 'no-cache',
     Accept: '*/*',
     'User-Agent': 'PostmanRuntime/7.19.0',
     Authorization: 'OAuth realm="https%3A%2F%2Fapi.cardmarket.com%2Fws%2Fv2.0%2Foutput.json%2Fproducts%2Ffind",oauth_consumer_key="xxxxxxxxx",oauth_token="xxxxxxxxx",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1579186959",oauth_nonce="vWUKBoTTkle",oauth_version="1.0",oauth_signature="ZD2TwzLVHqOjLm3u%2BWv%2FsQ8mdfs%3D"' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(response.statusCode);
});

Так что в основном это мой (отлично работает) Postman request.

Есть идеи, что не так с синтаксисом или как правильно реализовать подпись oauth в заголовках?

1 Ответ

0 голосов
/ 16 января 2020

Ошибка HTTP 401 означает «неавторизованный». Я не думаю, что OAuth-авторизация предназначена для передачи через заголовки.

Предполагается, что это что-то вроде:

var request = require("request");

url='https://api.cardmarket.com/ws/v2.0/output.json/products/find';

oauth = {
     consumer_key: CONSUMER_KEY,
     consumer_secret: CONSUMER_SECRET,
     token: AUTH_TOKEN,
     token_secret: TOKEN_SECRET,
     signature_method : 'RSA-SHA1',

};

qs = {
     search: 'Salamangrande%25Loup%25Du%25Soleil',
     idGame: '3',
     idLanguage: '2'
};

request.get({url:url, oauth:oauth, qs:qs, json:true}, function (e, r, product) {
  console.log(product)
})

Проверьте документацию запроса для получения дополнительной информации о том, как обращаться с OAuth в запросе.

(Я настоятельно рекомендую использовать Ax ios вместо запроса, но это зависит от вас)

...