在成为Web开发人员12年之后,我无法获得一个简单的HTML请求来工作,真是一个白痴。
我正在尝试使用一个非常不稳定的第三方API。这是我需要发出的确切要求(已删除私人位):
POST http://[redacted host]/Execute HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml
Authorization: Basic [redacted credentials]
Content-Length: 547
Host: [redacted host]
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
<redacted-xml-body />
当通过SoapUI击中该请求时,我可以确认该请求有效。如果我尝试按以下方式使用Angular 6 HttpClient,它将以OPTIONS动词而不是POST的形式发送请求,并且API将没有任何请求。 我知道这是由于CORS造成的,但无论如何(同样,该API都是简陋的),我都需要它不这样做。
const options = {
headers: new HttpHeaders({
'Content-Type': 'text/xml',
'Authorization': 'Basic R2F0ZUNoZWNrQHByZW1pZXItdXMubmV0OkdhdGVDaGVjayEh', // + this.loginService.loginToken,
}),
responseType: 'text' as 'text'
};
const xmlBody = builder.create(body).toString();
const response = await this.http.post(url, xmlBody, options).toPromise();
我也尝试过fetch()
和$.ajax
,但它们似乎从未发送过正确的标题...
有人可以告诉我如何从Angular6中的JS / TS发送上述请求吗?
编辑:我要使用的API确实很旧,并且可能一开始就不正确支持CORS,因此我需要绕过选项请求的原因。
答案 0 :(得分:2)
如评论中所述,预检请求是CORS协议的一部分,由浏览器强制执行。 SoapUI无法在浏览器中运行。
考虑使用Express或其他轻量级HTTP服务器编写瘦API,以将请求代理到您尝试访问的端点(未启用CORS)。