unsupported protocol错误

问题描述

目的是爬虫某个网站,每天自动获取想要的信息然后推送到个人微信上。爬取某个页面的时候报错,错误信息如下:

SSL routines:ssl_choose_client_version:unsupported protocol:...

问题分析

主要的错误信息如下:

  1. SSL
  2. unsupported protocol

基于stackoverflow 搜索一下,得到错误原因:Node.js 12's default TLS settings are stricter now. The site doesn't handle TLS v1.2. Node 12 by default need 1.2.(Nodejs 12的 TSL 设置更加严格了, 默认使用1.2版本,如果网站不支持将出现以上错误:不被支持的协议).

所以,因为所爬取的网站不支持TLS1.2返回以上错误。

问题解决

在实际项目中有以下几种方式,目的就是设置Nodejs TLS最低版本:

代码中直接设置

在项目入口处进行设置

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

require('tls').DEFAULT_MIN_VERSION = 'TLSv1';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3001);
}
bootstrap();

在命令行中设置

node main.js --tls-min-v1.0

ts-node中使用

node --tls-min-v1.0 -r ts-node/register src/main.ts

pm2中使用

pm2 start dist/main.js --node-args \"--tls-min-v1.0\"