为啥使用 axios 从 XML 中获取数据会引发 cors 错误? [复制]

Posted

技术标签:

【中文标题】为啥使用 axios 从 XML 中获取数据会引发 cors 错误? [复制]【英文标题】:Why does using axios to fetch data from XML throw cors error? [duplicate]为什么使用 axios 从 XML 中获取数据会引发 cors 错误? [复制] 【发布时间】:2021-12-20 04:45:15 【问题描述】:

我正在使用 axios 从 API 中获取一些包含 XML 数据的数据。我的 API 调用在 Postman 中工作,但在 reactjs 中,它会抛出类似 No 'Access-Control-Allow-Origin' header is present on the requested resource. 我试图把 'Access-Control -Allow-Credentials':true 到标题。但它不起作用。也看看我的代码


import axios from "axios";
import React,  useEffect  from "react";
const convert = require("xml-js");

export default function DailyNews() 
  useEffect(() => 
    axios
      .get("https://www.tcmb.gov.tr/kurlar/today.xml")
      .then(function (response) 
        console.log(response); // this will print xml data structure
        const data = JSON.parse(
          convert.xml2json(response.data,  compact: true, spaces: 2 )
        );
        console.log(data);
      )
      .catch(function (error) 
        console.log(error);
      )
      .then(function () 
        // always executed
      );
  , []);

  return (
    <div>
      <h1>XML CALISMASI</h1>
    </div>
  );


【问题讨论】:

您请求的资源(即 tcmb 服务器)必须指定允许跨域请求的来源。如果您的来源不在允许列表中,您的 浏览器 将不会向您显示响应(这是客户端安全措施)。 Postman 没有实现 CORS 保护(在这里讨论了一下:***.com/questions/36250615/cors-with-postman) 这能回答你的问题吗? Why does my javascript code receive a "No 'Access-Control-Allow-Origin' header is present on the requested resource" error, while Postman does not? @fsefidabi 那么有没有其他方法可以在我的 reactapp 中使用“tcmb.gov.tr/kurlar/today.xml”数据? 尝试将Access-Control-Allow-Origin 设置为* 而不是true 是的。如果您在 *** 上搜索“Access-Control-Allow-Origin”主题,您会发现几个可能对您有所帮助的问题。 【参考方案1】:

您的代码抛出错误,因为您的域未在他们的网站上列入白名单,这意味着您不能只查询他们的 URL 并使用它,然后您的浏览器会将其视为安全违规。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

虽然 CORS 只是一个浏览器的东西,你仍然可以自己查询那个 API,然后从你的客户端调用你自己的服务器 API,只要是你的服务器调用他们的 API,然后将数据传递给你的客户。

【讨论】:

所以我需要在nodejs中创建自己的服务器,然后调用API? 是的,然后你调用你自己的 API,反过来调用他们的服务器 API。

以上是关于为啥使用 axios 从 XML 中获取数据会引发 cors 错误? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 axios 使用 React.useEffect 一遍又一遍地从 Rails 后端获取调用?

为啥日期会更改 1 天?

为啥我使用 axios 获取数据时出现错误 500

在邮递员中上传文件有效,但在 axios 中会引发 500 错误

axios 为带有表单数据的发布请求返回 404

为啥从 ajax 调用 web 服务会引发内部服务器 500 错误?