node.js - 使用 Oauth1 签名的 NodeJS 的 API 调用不起作用
问题描述
我使用 NodeJS 的 api 调用有问题。我对邮递员没有问题,但是当我用 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);
});
所以基本上这是我的(完美工作)。
知道语法有什么问题或如何在标头中正确实现 oauth 签名吗?
解决方案
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 的更多说明。
(我强烈建议使用 Axios 而不是 request,但这取决于你)
推荐阅读
- asp.net - 使用 .Net Core 在 Mac OS 上进行 Active Directory 搜索
- azure-devops - 我可以使用服务挂钩拒绝推送到 Azure DevOps 存储库吗?
- wpf - 单击按钮以填充收集的最新点的表单字段
- google-apps-script - 如何在 App 脚本中创建具有连接脚本的新电子表格?
- angular - 在角度方面,如何将 webAPI XML 数据填充到材料的自动完成组件中以及如何选择名称,但仅将其 PK 发回
- python - 当我从其他应用程序调用模型时,它不显示。在贝壳工作
- python - Pyqt5 Qgraphicsview 在加载时适当缩放
- javascript - 从 API 检索的重音字符在 ReactJS 中不起作用
- react-native - store 没有reducer initialState
- java - 我们可以将 java.util.concurrent.Future 值存储在全局变量中吗?那是正确的方法吗?