将Python API调用转换为NodeJS Axios API调用-如何正确格式化



我得到一个400错误和isAxiosError: true。我认为问题是auth行的格式不正确,或者我不太了解params在axios中是如何工作的,以及api需要什么?我把python翻译成Axios/JS做错了什么?这是Voila Norbert API文档。

这是我的Axios api调用。

axios.post('https://api.voilanorbert.com/2018-01-08/search/name', {
params: {
auth: {any_string: API_KEY},
data: { 
domain: 'amazon.com',
name: 'Jeff Bezos'
}
}
})

这是python版本:

API_TOKEN = 'abcde'
req = requests.post(
'https://api.voilanorbert.com/2018-01-08/search/name',
auth=('any_string', API_TOKEN),
data = {
'name': 'Cyril Nicodeme',
'domain': 'reflectiv.net'
}
)

我迟了一年才得到这个答案,但我是在用同一个API处理同一个错误时发现你的问题的。API文档建议的Python代码对我来说是成功响应的,但我想在Node中完成,JS代码返回400错误。我正在分享我的解决方案,以防将来对他人有所帮助。

我认为核心问题是API希望数据作为表单数据发布,而不是作为JSON发布。我在另一篇文章中举了一个例子,用Axios发布表单数据,但仍然收到400错误。

然后我尝试使用请求包而不是Axios发布它,结果得到了成功的响应(没有错误(:

const request = require('request');
var data = {'name': 'Jeff Bezos', 'domain': 'amazon.com'};
request.post({
url: 'https://any_string:API_KEY@api.voilanorbert.com/2018-01-08/search/name',
form: data,
}, function(error, response, body){
console.log(body);
});

此示例在数据包含在表单:字段中时有效,但在正文:中时无效

请注意,请求包已弃用,并且处于维护模式。

根据他们的文档,https://github.com/axios/axios,您需要将auth作为一个单独的字段,而不是在params:内部

axios.post('https://api.voilanorbert.com/2018-01-08/search/name', {
auth: {
username: 'any_string',
password: API_KEY
},
data: { 
domain: 'amazon.com',
name: 'Jeff Bezos'
}
})

更新:删除了dataparams中的嵌套。它们应该作为POST正文而不是URL参数发送。

相关内容

  • 没有找到相关文章

最新更新