以下代码适用于 Node 的v10.15.3
版本:
const { post } = require('request');
post({
url: 'https://cidadao.sinesp.gov.br/sinesp-cidadao/mobile/consultar-placa/v4',
body: '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<v:Envelope xmlns:v=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <v:Header>\n <b>LGE Nexus 5</b>\n <c>ANDROID</c>\n <d>v4</d>\n <e>4.3.2</e>\n <f>98.193.54.223</f>\n <g>514650d8dba4784ed08b5a029583576361a50bc5</g>\n <h>-3272.3179572637086</h>\n <i>940.839492700698</i>\n <j/>\n <k/>\n <l>2019-05-24 10:24:35</l>\n <m>8797e74f0d6eb7b1ff3dc114d4aa12d3</m>\n </v:Header>\n <v:Body xmlns:n0=\"http://soap.ws.placa.service.sinesp.serpro.gov.br/\">\n <n0:getStatus>\n <a>LSU3J43</a>\n </n0:getStatus>\n </v:Body>\n</v:Envelope>',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent': 'SinespCidadao / 3.0.2.1 CFNetwork / 758.2.8 Darwin / 15.0.0',
Host: 'cidadao.sinesp.gov.br'
},
}, (err, httpResponse, body) => {
if (err) return console.error(err);
console.log(JSON.stringify(httpResponse));
});
但升级到之后v12.2.0
或以上我收到以下错误:
Error: write EPROTO 17432:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:c:\ws\deps\openssl\openssl\ssl\statem\statem_lib.c:1922:
at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:83:16) {
errno: 'EPROTO',
code: 'EPROTO',
syscall: 'write'
}
我该如何修复它?
由于相同的代码可以在 Node.js 上运行v10.15.3
,但不工作v12.2.0
,并且错误消息指示“不支持的协议”,此问题最可能的根本原因是:Node.js 10 中支持的最低 TLS 版本是TLSv1.0
, 但是由于v11.4.0
,它被提升到TLSv1.2
(tls.DEFAULT_MIN_VERSION https://nodejs.org/api/tls.html#tls_tls_default_min_version)。我怀疑证书cidadao.sinesp.gov.br
使用 TLSv1.0 进行签名,适用于 Node.jsv10.15.3
,但不是在v12.2.0
.
让 Node.js 接受TLSv1.0
,您可以使用以下命令启动 Node.js 进程--tls-min-v1.0
option.
我做了一个实验,效果很好:
顺便说一句,证书cidadao.sinesp.gov.br
现在无效。它自 2018 年 5 月以来已过期 - 正如 OP 提到的,请求应从巴西发送(或通过巴西的代理节点)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)