首页 > 解决方案 > 为什么使用 axios 发出 get 请求失败并显示状态码 503?

问题描述

const { default: Axios } = require("axios");
var giveMeAJoke = require("give-me-a-joke");

const getjoke = async () => {
  try {
    const data1 = await Axios.get("https://icanhazdadjoke.com", {
      headers: {
        Accept: "application/json",
      },
    });
  } catch (e) {
    console.log(e);
  }
};

getjoke();

这就是我在 axios 上尝试的。我用 fetch() 提出了同样的请求,它工作得很好。我使用的很少有依赖于 axios 的包,每个包都抛出相同的错误。帮帮我。

node index.js 
Error: Request failed with status code 503
    at createError (D:\web-technology\practice\test\jokester\node_modules\axios\lib\core\createError.js:16:15)
    at settle (D:\web-technology\practice\test\jokester\node_modules\axios\lib\core\settle.js:17:12)
    at IncomingMessage.handleStreamEnd (D:\web-technology\practice\test\jokester\node_modules\axios\lib\adapters\http.js:236:11)
    at IncomingMessage.emit (node:events:406:35)
    at endReadableNT (node:internal/streams/readable:1329:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)

标签: javascriptnode.jsajaxhttpsaxios

解决方案


服务器似乎User-Agent需要自定义标头,并且在 axios 的情况下的默认值("axios/0.21.1")会因为axios后面跟着/符号而产生问题,因此如果您提供一些其他值或删除/字符,例如。("axios 0.21.1"),然后它工作。

const axios = require('axios').default;

const getjoke = async () => {
  try {
    const response = await axios.get("https://icanhazdadjoke.com/", {
      headers: {
        Accept: "application/json",
        "User-Agent": "axios 0.21.1"
      }
    });
    console.log("received response: ", response.data);
  } catch (err) {
    console.log("received error: ", err.toJSON());
  }
};

getjoke();

输出:

received response: {
  id: 'm3wPZoz51ob',
  joke: 'Did you hear the news? FedEx and UPS are merging. They’re going to go by the name Fed-Up from now on.',
  status: 200
}

推荐阅读