我正在尝试发出HTTP POST请求以使用Mailchimp API(来自Angular7代码)但我得到这个回应:
从源'https://us12.api.mailchimp.com/3.0/lists/ddddddd/members'到'http://localhost:4200'处对XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:没有'Access-Control-Allow-Origin'标头在请求的资源上。
从REST客户端,我可以在Mailchimp中插入而不会出现此CROS问题
export class MyService {
constructor(public httpRequestsService: HttpRequestsService) { }
private async getHttpHeader() {
const rheaders = new HttpHeaders({
'Content-Type': 'application/json' ,
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
'Access-Control-Allow-Headers':'X-Requested-With',
'Authorization': 'apikey ' + MailchimpSettings.API_KEY
});
return { headers: rheaders };
}
public async AddNewMember(email: string, language = 'en', status = , mergeFields?: any) {
var url = MailchimpSettings.URL;
var body = {
"email_address": email,
"status": MailchimpSettings.SUBSCRIBED_STATUS,
"language": language
};
var httpOptions = await this.getHttpHeader();
var _body = JSON.stringify(body);
var result = await this.post(url, _body, httpOptions);
}
public async post(url: string, body: string | {} = {}, requestHeaders?: any): Promise<Response> {
return this.http.post(url, body, requestHeaders).toPromise()
.then((res: any) => {
return res;
})
.catch((err) => {
return this.handleErrorPromise(err);
});
}
}
任何可以通过正确的HTTP标头(或任何必要的更改)来帮助我以重现REST客户端行为并能够成功进行POST的人。
感谢您的帮助
不幸的是,答案是你不能。 Mailchimp不支持CORS,因为这将需要传递API凭据,并且这是不安全的。
该选项是从另一个服务器发出请求,就像您从REST客户端中提到的那样,或者创建将使用更多受限API调用的自定义注册表单。