以下是我的应用程序的示例代码。为什么它不起作用?
错误:
"{"error":"unauthorized","error_description":"An Authentication object was not found in the SecurityContext"}"
var post_data = JSON.stringify({
'appid' : results.appid,
'appsecret': results.appsecret,
});
var url = serviceUrl+"/oauth-service/oauth/token?grant_type=client_credentials";
var post_options = {
host: url,
headers: {
'Content-Type': 'application/json'
},
data:post_data
};
const req = https.request(post_options, function(res) {
res.setEncoding('utf8');
res.on('data',function(chunk){
console.log(chunk);
});
});
req.write(post_data);
req.end();
答案 0 :(得分:0)
在HTTPS请求方面,您不需要data
中post_options
(数据使用write
发送)。
更重要的是,您需要将Content-Length
标题设置为Buffer.byteLength(post_data)
。
此外,host
(或hostname
)字段应仅包含主机名(例如www.facebook.com
- 不需要https://
)和其余网址(例如/oauth_service/...
}应放在path
字段中。
这是一个改编自node.js docs的例子。它们仅提供http
的示例,但它与https
大致相同:
const postData = JSON.stringify({
'msg': 'Hello World!'
});
const options = {
hostname: 'www.google.com',
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.write(postData);
req.end();
请注意,如果不指定您正在使用哪种服务,则无法确定您是否正确实施协议(例如,网址是否正确,请求正文是否正确,等等。)。因此,如果你修复了Content-Length
但事情仍然无效,请提供更多信息。