如何使用https请求

时间:2017-04-15 05:12:28

标签: node.js https

以下是我的应用程序的示例代码。为什么它不起作用?

错误:

  

"{"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();

1 个答案:

答案 0 :(得分:0)

在HTTPS请求方面,您不需要datapost_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但事情仍然无效,请提供更多信息。