我整天都在尝试使用axios在响应中执行发布请求(我正在尝试获取Monzo应用程序的access_token)。我已经按照here的说明进行了操作,当按照上述说明中的说明使用httpie
命令行工具进行尝试时,它们可以正常工作。但是,当我尝试从我的React应用程序中使用它时,事情就变了。有关使用httpie的发帖请求如下:
http --form POST "https://api.monzo.com/oauth2/token" \
"grant_type=authorization_code" \
"client_id=my_client_id" \
"client_secret=my_client_secret" \
"redirect_uri=my_redirect_uri" \
"code=my_authorization_code"
这可以按预期工作,并返回一个包含我的access_token的JSON对象。
我在react应用中一直使用的(有问题的)axios命令是:
axios.post(
"https://api.monzo.com/oauth2/token", {
grant_type: "authorization_code",
client_id: my_client_id,
client_secret: my_client_secret,
redirect_uri: my_redirect_uri,
code: my_authorization_code
})
我收到的错误消息是Failed to load resource: the server responded with a status of 400 ()
。
我发现this是一个非常相关的问题,这表明我添加了一个标头,指定了Content-Type: application/json
,因此我将axios命令更改为:
axios({
method: "POST",
url: "https://api.monzo.com/oauth2/token",
data: JSON.stringify({
grant_type: "authorization_code",
client_id: my_client_id,
client_secret: my_client_secret,
redirect_uri: my_redirect_uri,
code: my_authorization_code
}),
headers: {
'Content-Type': 'application/json'
}
})
不幸的是,它给出了完全相同的错误。
有人可以给我一些指导吗?我对网络很陌生...谢谢!
答案 0 :(得分:0)
这些事情通常都会发生,我在发布问题后不久就找到了答案。显然,“内容类型”需要以“ application / xxx-form-urlencoded”形式发送,并相应地转换数据,如下所示:
const queryString = require('query-string')
axios({
method: "POST",
url: "https://api.monzo.com/oauth2/token",
data: queryString.stringify({grant_type: ...}),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})