Cors 调用第三方API时处理COR
是的,这是一个非常著名的问题,我尝试过前面堆栈溢出QnA中提到的许多方法,但都没有效果。我试图在我的应用程序中使用API,但它给出了以下错误 这是我的服务类代码Cors 调用第三方API时处理COR,cors,angular-httpclient,Cors,Angular Httpclient,是的,这是一个非常著名的问题,我尝试过前面堆栈溢出QnA中提到的许多方法,但都没有效果。我试图在我的应用程序中使用API,但它给出了以下错误 这是我的服务类代码 从'@angular/core'导入{Injectable}; 从'@angular/common/http'导入{HttpClient}; 从“rxjs”导入{Observable}; 从'@angular/common/http'导入{HttpHeaders}; @可注射({providedIn:“根”}) 导出类PriceTab
从'@angular/core'导入{Injectable};
从'@angular/common/http'导入{HttpClient};
从“rxjs”导入{Observable};
从'@angular/common/http'导入{HttpHeaders};
@可注射({providedIn:“根”})
导出类PriceTableService{
私有价格URL=”https://banzaicloud.com/cloudinfo/api/v1/providers/google/services/compute/regions/asia-east2/products"
//私有价格URL=”https://jsonplaceholder.typicode.com/posts"
构造函数(私有http:HttpClient){}
httpOptions={
标题:新的HttpHeaders({
“访问控制允许方法”:“删除、发布、获取、选项”,
“访问控制允许标头”:“内容类型,访问控制允许标头,授权,X请求的带”,
“内容类型”:“应用程序/json”,
“访问控制允许来源”:http://localhost:4200'
})
};
getPrices(){
this.http.get(this.priceurl,this.httpOptions).subscribe(结果=>{
控制台日志(结果);
返回(结果);
})
}
恩戈尼尼特(){
}
}
这在
POSTMAN
和CHROME
中有效,但无法将数据输入到我的angular应用程序中,当我用任何其他伪URL替换URL时,我可以获取数据,但上述API没有提供数据,如果有人能帮我解决这个问题,那将是一个很大的帮助。首先,您需要了解CORS检查是由浏览器完成的。这是一个W3C规范。像Postman这样的任何扩展或工具都不受此限制。这就是你通过邮递员得到结果的原因
另一件事是,您已经尝试向请求添加访问控制Allow Origin头。这不是CORS规范所期望的。您需要在响应中使用Access Control Allow Origin标头。这意味着它需要由服务器端添加
由于您正在调用第三方API,我相信您无法控制服务器。因此,要求通过设置访问控制允许来源来处理CORS问题是不可能的
假设您没有访问服务器的权限,有3种方法可以解决此问题
const express=require('express');
const request = require('request');
const app=express();
app.get('/data',(req,res,next)=>{
request('https://banzaicloud.com/cloudinfo/api/v1/providers/google/services/compute/regions/asia-east2/products',
function (error, response, body) {
res.send(body)
});
});
const port =process.env.port || 3000;
app.listen(port,()=>{
console.log(`From port ${port}`);
});
然后您可以使用
http://localhost:3000/data
在前端获取数据。检查标题。您可能正在发送外部API不喜欢的标题(如授权
等),这可能会导致此错误。此崩溃CORS为我节省了大量时间。并非所有第三方API都允许跨源,而不是重定向,您可以将URL更改为后端,并在响应后返回到源端点以进行下一步