我在离子2应用程序中使用Angular 2 http get请求时遇到了一些问题。
事实上我有一个网站(由Jalios CMS制作),目前正在localhost:8080上运行Apache tomcat,我想通过RESTful Web服务从我的离子应用程序访问数据。要访问该网站,用户需要登录,并且他们的密码可以包含特殊的字符,如@,#。:?
当我使用cURL命令时,我可以毫无问题地访问数据。数据以xml格式返回。
curl -u username:p@ssword http://localhost:8080/jcms/rest/data/Article
然而,在我的离子2应用程序中,我有以下错误:
OPTIONS http:/ / localhost:8080 / jcms / rest / data / Article 401(Non-Autoris%E9)。 polyfills.js:3
XMLHttpRequest无法加载http:// localhost:8080 / jcms / rest / data / Article。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许来源'http:/ / localhost:8100'访问。响应具有HTTP状态代码401.(索引):1
错误响应{_body:ProgressEvent,status:0,ok:false,statusText:“”,headers:Headers ...}。 core.es5.js:1084
我的http提供商: rest-service.ts
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class RestService {
constructor(public http: Http) {
console.log('Hello RestService Provider');
}
httpGet(username: string, password: string, resource: string){
let url = 'http://localhost:8080/jcms/rest/data/' + resource;
let headers: Headers = new Headers();
headers.append("Authorization", "Basic " + btoa(username + ":" + password));
return this.http.get(url, {headers: headers});
}
}
我的离子页面(组件): home.ts
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {RestService} from "../../providers/rest-service";
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
result: Array<any>;
constructor(public navCtrl: NavController, private restService: RestService) {
this.restServiceGet();
}
restServiceGet(){
this.restService.httpGet('username', 'p@ssword', 'Article')
.map(res => res.json())
.subscribe(data => this.result = data);
}
}
通常所有都已在app.module.ts文件中正确导入。我还尝试通过URL编码更改特殊字符(@ 40为%),并直接用基本64等效的用户名替换btoa:p @ assword。
你能帮我纠正这个错误吗?特别是401未经授权,因为我理解为什么会发生这种情况,而我用基本的身份验证来实现标题。我的错误在哪里?
谢谢