【发布时间】:2021-01-02 22:22:13
【问题描述】:
Paypal 说要发出以下 curl 请求
curl -v POST https://api-m.sandbox.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "CLIENT_ID:SECRET" \
-d "grant_type=client_credentials"
但是,我想通过 HTTP 请求来实现。我尝试了以下方法:
const HTTP = require('http')
const data = JSON.stringify({
paypalclientid:paypalsecretid,
"grant_type": "client_credentials",
})
const options = {
host: 'api-m.sandbox.paypal.com',
port: 80,
path: '/v1/oauth2/token',
method: 'POST',
headers: {
'Accept': 'application/json',
"Accept-Language": "en_US"
}
}
const req = http.request(options, res => {
console.log(`statusCode: ${res.statusCode}`)
res.on('data', d => {
process.stdout.write(d)
})
})
req.on('error', error => {
console.error(error)
})
req.write(data)
req.end()
我得到了以下信息:
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://api-m.sandbox.paypal.com/v1/oauth2/token" on this server.<P>
Reference #18.9ce33e17.1609625956.708d702f
</BODY>
</HTML>
这就是你执行普通 GET 请求时得到的结果。
【问题讨论】:
-
curl 帮助页面:
-u, --user <user:password> Server user and password。您在帖子正文中传递它,而不是作为 HTTP 用户/密码。 -
附带说明,我建议您使用一个库来处理 http 请求,默认的 http 模块并不完全是用户友好的。我会推荐node-fetch,因为它实现了与浏览器相同的api。
-
在 curl 请求中,使用了
https,但您在options中定义了port: 80。https的默认端口是443。
标签: javascript node.js http paypal request