【问题标题】:Rejected request when trying to fetch a website contents尝试获取网站内容时被拒绝的请求
【发布时间】:2019-10-09 16:01:45
【问题描述】:

我正在为网页抓取编写一个基于 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 时,我得到了响应。

这里有什么问题?我想这与请求配置有关。我试着玩了一下,但没有成功。

【问题讨论】:

  • 你使用的是最新版本的 axios 的 npm 包吗?我已经测试了这段代码 sn-p 并设法记录了来自该站点的响应。
  • 我认为您在这里遇到了 tls 问题

标签: node.js express web-scraping axios


【解决方案1】:

这是因为从 Node.js 12 开始,默认的 TLS 设置被收紧了。该站点不处理 TLS v1.2 ,但在 Node.js 12 中默认需要它。 您可以在启动节点时通过命令行标志 (--tls-min-v1.0) 更改它,我对其进行了测试并且它可以工作。 node --tls-min-v1.0 app.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多