axios (node:78)未处理承诺拒绝警告:错误:请求失败,状态代码502

oo7oh9g9  于 2022-12-18  发布在  iOS
关注(0)|答案(2)|浏览(661)

我得到的请求失败,状态代码502。我试图从主页上获取数据,并将其显示到我正在建设的前端网站,但我不能得到我的生活原始html。

const express = require("express");
  const cheerio = require("cheerio");
  const axios = require("axios");

  const app = express();

  const PORT = process.env.PORT || 3000;

  const website = "https://und.com";

  try {
    axios(website).then((res) => {
      const data = res.data;
      const $ = cheerio.load(data);

      let content = [];

      $(".sdc-site-tile__headline", data).each(function () {
        const title = $(this).text();
        const url = $(this).find("a").attr("href");

        content.push({
          title,
          url
        });

        app.get("/", (req, res) => {
          res.json(content);
        });
      });
    });
  } catch (error) {
    console.log(error, error.message);
  }

  app.listen(PORT, () => {
    console.log(`server is running on PORT:${PORT}`);
  });
8e2ybdfx

8e2ybdfx1#

此问题需要更多信息。502 HTTP错误表示以下含义:
502错误是状态代码之一,它表示您连接到的Web服务器正在充当从另一个服务器中继的数据的代理,但该服务器返回了无效响应。
因为你试图抓取一个网站,很可能你被屏蔽了。这可能是因为你的用户代理包含的标志被他们的服务器嗅探到,从而被屏蔽了。
您可以将用户代理更改为显示您是实际浏览器的内容。请尝试在http标头中传递用户代理。
以下链接用于添加Axios的标题选项:
Force to use different user agent with js or axios

r7xajy2e

r7xajy2e2#

根据您的评论和建议用户代理避免502响应的existing answer,您似乎希望选择器".post__meta h3 a:last-child"

const axios = require("axios"); // ^0.21.4
const cheerio = require("cheerio"); // 1.0.0-rc.12

const website = "https://und.com";
const options = {
  headers: {
    "user-agent":
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
  },
};

axios(website, options)
  .then(({data}) => {
    const $ = cheerio.load(data);
    const result = $(".post__meta h3 a:last-child")
      .map((_, e) => $(e).text().trim())
      .get();
    console.log(result);
  })
  .catch((err) => console.error(err));

请注意,try/catch不适用于.then

// wrong (Uncaught (in promise) TypeError: Failed to fetch)
try {
  fetch("wrong")
    .then(res => res.text())
    .then(text => console.log(text));
}
catch (err) {
  console.error(err);
}

// correct
fetch("wrong")
  .then(res => res.text())
  .then(text => console.log(text))
  .catch(err => console.error(err));

// correct
(async () => {
  try {
    const res = await fetch("wrong");
    const text = await res.text();
    console.log(text);
  }
  catch (err) {
    console.error(err);
  }
})();

相关问题