调用第三方 API 时处理 CORS

2023-11-27

yes this is a very famous question , I have tried many ways mentioned in the previous stack-overflow QnA, but nothing worked. I am trying to use BANZAI-Cloud API in my application , but it gives the following error enter image description here

这是我的服务类代码

import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http';
import { Observable } from 'rxjs';
import { HttpHeaders } from '@angular/common/http';

@Injectable({providedIn:"root"})
export class PriceTableService{
   
    private priceurl = "https://banzaicloud.com/cloudinfo/api/v1/providers/google/services/compute/regions/asia-east2/products"
    // private priceurl = "https://jsonplaceholder.typicode.com/posts"
    
    constructor(private http:HttpClient){}
    httpOptions = {
        headers: new HttpHeaders({
            'Access-Control-Allow-Methods':'DELETE, POST, GET, OPTIONS',
            'Access-Control-Allow-Headers':'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With',
            'Content-Type':  'application/json',
            'Access-Control-Allow-Origin':'http://localhost:4200'
        })
      };
    getPrices(){
            this.http.get(this.priceurl,this.httpOptions).subscribe(result=>{
            console.log(result);
            return(result);
        })
     }
    ngOnInit() {
    }
}

this API工作于POSTMAN and CHROME但当我用任何其他假冒的 URL 替换 URL 时,无法将数据获取到我的角度应用程序中API我可以获取数据,但是上面提到的 API 没有提供数据,如果有人可以帮助我解决这个问题,那将是一个很大的帮助。


首先,您需要了解 CORS 检查是由浏览器完成的。这是 W3C 规范。任何扩展或工具(例如 Postman)都不受此约束。这就是您通过 Postman 获得结果的原因。

另一件事是,您尝试将 Access-Control-Allow-Origin 标头添加到请求中。这不是 CORS 规范所期望的。您需要在响应中包含 Access-Control-Allow-Origin 标头。这意味着它需要由服务器端添加。

由于您正在调用第 3 方 API,因此我相信您无法控制服务器。因此,要求通过设置 Access-Control-Allow-Origin 来处理 CORS 问题是不可能的。

假设您无权访问服务器,可以通过 3 种方法解决此问题。

  1. 通过在浏览器中禁用 CORS 检查(不建议用于生产)。

  2. 通过在浏览器中使用 CORS 插件(不推荐用于生产)。

  3. 通过代理请求资源 - 最简单的方法,你可以做的是,编写一个小型节点服务器(或者如果你已经有一个后端将其与你的前端关联起来,你可以使用它)来执行请求3rd 方 API 并发回响应。现在,在该服务器响应中,您可以允许跨源标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用第三方 API 时处理 CORS 的相关文章

随机推荐

  • 将私钥添加到 X509Certificate

    我正在编写一些当前使用 OpenSSL net 为证书签名请求创建公钥 私钥对的代码 该请求配备有公钥并发送到 CA CA 返回签名证书 然后将之前创建的私钥添加到证书中 myCert PrivateKey CryptoKey FromPr
  • 如何从 AWS SAM 获取堆栈输出?

    我想对我的无服务器项目执行自动集成测试 为此 我需要以某种方式获取 api 端点 已经有插件 serverless stack output用于服务于该目的的无服务器框架 但我想知道在部署应用程序后如何通过 AWS SAM 实现类似的目标
  • 客户端向服务器发送延迟的 FIN ACK(约 500 毫秒)

    我有一个 node js 客户端 10 177 62 7 请求来自服务器 10 177 0 1 的 http Rest 服务的一些数据 客户端只需使用node js http request 方法 agent false 客户端位于 Ubu
  • 如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中

    我加载网格视图 网格视图有一个编辑和删除按钮 我点击 编辑 然后我得到 ddlAssignedTo has a SelectedValue which is invalid because it does not exist in the
  • 异常的 C++[Bug]?

    我一直在阅读Exceptional C by Herb Sutter 到达时Item 32 我发现了以下内容 namespace A struct X struct Y void f int void g X namespace B voi
  • 如何使 Playground 执行时间像我们在 iOS 应用程序中运行一样快

    我发现游乐场的执行速度并不可靠 例如使用代码 import UIKit var count 0 let startTime NSDate for i in 1 10000 count let endTime NSDate let inter
  • 将 OpenApi 路径拆分为多个路径定义文件

    我想更轻松地将我的路径 相当多 分割成它们自己的文件 假设我有两条主要路径 user and anotherPath有几个子路径 现在我有了一个 OpenApi 规范文件 其路径被引用到一个索引文件 该索引文件保存对每个路径的引用 用其参考
  • 64 位编译器中的浮点支持

    我们应该对 64 位 Delphi 编译器中的浮点支持有何期待 64位编译器会使用SSE吗 实现浮点运算 64位编译器支持吗 当前80位浮点类型 扩展 这些问题密切相关 所以我将它们作为一个问题来问 我就这个主题发表了两篇文章 here a
  • 如何发布一个空数组(整数)(jQuery -> MVC 3)

    使用 jQuery 我发布了一个数组int通过将数组放入 data 参数中来添加到我的 MVC 3 应用程序 如下所示 data myIntArray myIntArray 在我的控制器中 接收操作有一个参数int myIntArray 这
  • 如何在模型-视图-视图模型架构中的模型方法中间干净地获取用户输入?

    我正在编写一个侦听网络连接的应用程序 当一些数据到达时 它会回复 并且根据传入的数据 它可能需要在回复之前询问用户 显示对话框 我不知道如何在 M V VM 架构中干净地做到这一点 如果我只需要根据传入数据更新 GUI 那么事件和绑定到可观
  • 没有办法在 JavaScript 中拥有基于类的对象吗?

    基于 javascript 原型的面向对象编程风格很有趣 但是在很多情况下您需要能够从类创建对象 例如 在矢量绘图应用程序中 工作区在绘图开始时通常是空的 我无法从现有的 线 创建新的 线 更一般地说 动态创建对象的每种情况都需要使用类 我
  • 如何优雅地关闭嵌入式码头

    我有一个应用程序在嵌入式码头服务器上运行 现在我想启动 停止服务器作为服务 我使用脚本来启动服务器 java JAVA OPTS DREQ JAVA VERSION JAVA VERSION jar myjetty jar 主班 Serve
  • javascript:访问不同框架中的对象?

    如果我在 1 页上有一个框架集的 2 个框架 JS 有没有办法访问相对框架中的元素 Thanks 是的 但前提是两个框架上的页面位于同一域中 你可以做document getElementById frame id contentWindo
  • 如何在 RSS feed 上的 元素中正确放置日期

    我正在使用 RSS Graffitty 将 RSS 项目发布到 Facebook 页面 该应用程序告诉我这些项目缺少发布日期 所以我添加了这个标签 echo
  • 如何使用 Eclipse 处理 Boost.Test 输出

    我正在使用 Eclipse CDT 和 Boost Test 带有 Boost Build 我希望 Eclipse 能够解析构建期间运行测试套件期间生成的 Boost Test 的输出 有人知道如何实现这一目标吗 提前致谢 转至窗口 gt
  • Autofac命名注册构造函数注入

    Autofac是否支持在组件的构造函数中指定注册名称 示例 Ninject 的NamedAttribute 您需要使用顶部的 Autofac Extras Attributed 包来实现此目的 假设您有一个接口和两个类 public int
  • 使用 Android getIdentifier()

    我试过这个 r Resources getSystem getIdentifier ball red drawable com Juggle2 Log i FindBall R r 和这个 r Resources getSystem get
  • 使用花括号初始化列表调用显式构造函数:是否不明确?

    考虑以下 struct A A int int struct B B A 1 explicit B int int 2 int main B paren 1 2 3 B brace 1 2 4 的建设brace in 4 明确无误地呼吁 2
  • 如何隐藏滚动条上的灰点

    In Visual Studio 2015 2017 我们怎样才能隐藏Vertical Scrollbar的灰点如下图 如果您试图隐藏由 建议 而不是书签 引起的灰点 那么这就是具体的设置 Tools gt Options gt Envir
  • 调用第三方 API 时处理 CORS

    yes this is a very famous question I have tried many ways mentioned in the previous stack overflow QnA but nothing worke