尝试获取网站内容时被拒绝的请求

时间:2019-10-09 16:01:45

标签: node.js express web-scraping axios

我正在编写一个基于Node.js的小型应用程序进行网络抓取。我正在使用axios库来处理HTTP请求。由于某些原因,我无法获取一个网站:

const express = require('express');
const axios = require('axios');

const app = express();
const port = process.env.PORT || 3000;

app.get('/', async (req, res) => {
  const url = 'http://www.ztm.waw.pl/';
  const fetchRes = await axios.get(url);
  console.log(fetchRes);
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

运行服务器并访问http://localhost:3000时出现错误:

UnhandledPromiseRejectionWarning: Error: write EPROTO 4554425792:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../deps/openssl/openssl/ssl/statem/statem_lib.c:1922:

代码大致上是正确的。例如,当我将url更改为http://stackoverflow.com时,我得到了响应。

这是什么问题?我想这与请求配置有关。我尝试过一点,但没有成功。

1 个答案:

答案 0 :(得分:1)

这是因为自Node.js 12起,默认的TLS设置已得到加强。该站点不处理TLS v1.2,但默认情况下在Node.js 12中是必需的。 您可以在启动节点时通过命令行标志(--tls-min-v1.0)对此进行更改,我对其进行了测试,并且它可以工作。 node --tls-min-v1.0 app.js