【发布时间】:2022-01-22 12:09:08
【问题描述】:
使用 Node.js 和交叉获取时,我在访问 HTTPS 站点时收到错误消息(请参阅下面的标题和 cmets)。不涉及代理。下面的代码是重现错误的简化版本。代码中的 cmets 包含准确的错误文本。
这一直有效,直到某些(?)发生变化,这让我相信服务器端的变化,我无法访问。但是,使用 GM_xmlhttpRequest 执行相同请求的 Tampermonkey JS 脚本仍然可以正常工作。
任何调试建议,或者为什么会生成“错误的版本号”?
编辑:在调试器中查看对tlssock.connect(options, tlssock._start); 的调用,'ciphers' 选项设置为ciphers: "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA" ,'port' 选项为 443。在 TLSSocket 成员中,我没有看到任何跳出的东西在我与版本号有关。
const fetch = require('cross-fetch');
const testURL = 'https://api.torn.com/faction/?selections=upgrades&key=xxxxxxxxxx';
fetch(testURL).then(res => {
console.log('[TEST] res: ', res);
}).then(data => {
console.log('[TEST] data: ', data);
}).catch(err => {
console.error("[TEST] error: ", err);
});
/*
Output:
[TEST] error: FetchError: request to https://api.torn.com/faction/?selections=upgrades&key=xxxxxxxxxx failed,
reason: write EPROTO 140735681590144:
error:1408F10B:SSL routines:ssl3_get_record:
wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
at ClientRequest.<anonymous> (/Users/edlau/Documents/Torn-JS/Fac-chat-generic/node_modules/node-fetch/lib/index.js:1461:11)
at ClientRequest.emit (events.js:400:28)
at TLSSocket.socketErrorListener (_http_client.js:475:9)
at TLSSocket.emit (events.js:400:28)
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
type: 'system',
errno: 'EPROTO',
code: 'EPROTO'
}*/
编辑2:我将node.js更新到最新,结果相同,版本信息如下:
npm version
{
facchat: '2.0.0',
npm: '8.3.0',
node: '17.3.0',
v8: '9.6.180.15-node.12',
uv: '1.42.0',
zlib: '1.2.11',
brotli: '1.0.9',
ares: '1.18.1',
modules: '102',
nghttp2: '1.45.1',
napi: '8',
llhttp: '6.0.4',
openssl: '3.0.1+quic',
cldr: '40.0',
icu: '70.1',
tz: '2021a3',
unicode: '14.0',
ngtcp2: '0.1.0-DEV',
nghttp3: '0.1.0-DEV'
}
编辑 3:使用 CURL(到相同的 URL): curl:(35)错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议
【问题讨论】:
标签: node.js openssl node-fetch