gpt4 book ai didi

node.js - NodeJS https 客户端错误 - 400

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:17 25 4
gpt4 key购买 nike

我正在创建一个连接到 Proxmox 2.1 的 REST API 的 NodeJS 服务。

我的脚本:

// module dependencies
var http = require('http'),
url = require('url'),
https = require('https'),
querystring = require('querystring'),
fs = require('fs');

exports.urlReq = function(reqUrl, options, cb){
if(typeof options === "function"){ cb = options; options = {}; }// incase no options passed in

// parse url to chunks
reqUrl = url.parse(reqUrl);

// http.request settings
var settings = {
host: reqUrl.hostname,
port: reqUrl.port || 80,
path: reqUrl.pathname,
headers: options.headers || {},
method: options.method || 'GET',
requestCert: false
};

// if there are params:
if(options.params){
options.params = querystring.stringify(options.params);
settings.headers['Content-Length'] = options.params.length;
};


// MAKE THE REQUEST
var req = https.request(settings);

req.on('error', function(err) {
console.log(err);
});

// when the response comes back
req.on('response', function(res){
res.body = '';

console.log("statusCode: ", res.statusCode);
console.log("headers: ", res.headers);

res.setEncoding('utf-8');

// concat chunks
res.on('data', function(chunk){ res.body += chunk });

res.on('error', function(err){
throw err;
})

// when the response has finished
res.on('end', function(){

// fire callback
cb(res.body, res);
});
});

// if there are params: write them to the request
if(options.params){ req.write(options.params) };

// end the request
req.end();
}

该脚本适用于 GET 请求,但在执行 POST 请求时,它会死掉。它不会抛出任何错误,只是默默地失败。

当控制台记录响应时,这里是 res.connection 对象:

connection: 
{ pair: [Object],
writable: true,
readable: true,
_paused: false,
_needDrain: false,
_pending: [],
_pendingCallbacks: [],
_pendingBytes: 0,
socket: [Object],
encrypted: [Object],
authorized: false,
_controlReleased: true,
_events: [Object],
_pool: <Buffer 48 54 54 50 2f 31 2e 31 20 34 30 30 20 50 61 72 61 6d 65 74 65 72 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2d 20 64 75 70 6c 69 63 ...>,
_poolStart: 332,
_poolEnd: 65536,
parser: [Object],
_httpMessage: [Circular],
ondata: [Function: socketOnData],
onend: [Function: socketOnEnd],
npnProtocol: undefined,
authorizationError: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' },

服务器使用自签名 SSL 证书。

任何帮助将不胜感激,

谢谢!

最佳答案

这已经相当老了,但我最近在 Proxmox 上遇到了类似的问题,并且希望为其他人看到这个问题做出贡献。

要解决“authorizationError:'UNABLE_TO_VERIFY_LEAF_SIGNATURE'”错误,您可以指示node.js接受自签名证书(默认情况下拒绝),请将其放在脚本的顶部:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

此外,我无法在您的代码中判断您是否设置了 Content-Type header ,但必须将其设置为 application/x-www-form-urlencoded 才能向 Proxmox API 发送 POST。也许您已经在 options.headers 中设置了它,但是当您指定 Content-Length 时,我不确定。 POST 也需要 CSRFPreventionToken,因此它也应该作为 header 的一部分传递。

关于node.js - NodeJS https 客户端错误 - 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com