我有一个类似下面的API:
网址:http://test.com/api/
此api具有以下帖子参数:
token: mytoken
content: project
format: json
returnFormat: json
我正在尝试编写一个服务来检索数据。我写的服务是:
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class RedCapTestService {
parameters: Object = {
'token': 'mytoken',
'content': 'project',
'format': 'json',
'returnFormat': 'json'
};
baseUrl = 'https://test.com/api/';
constructor(private http: Http) { }
getProjectInfo() {
return this.http.post(this.baseUrl, this.parameters).map(res => res.json()).catch(this.handleError);
}
}
我有一个测试组件,我测试该服务。
在test.component.ts
export class RedcapTestProjectInfoComponent implements OnInit {
project: any = {};
constructor(private redcapService: RedCapTestService) { }
ngOnInit() {
this.getProjectInfo();
}
getProjectInfo() {
this.redcapService.getProjectInfo().subscribe(project => {
this.project = project;
}, error => {
console.log('error occured');
});
}
}
这是我的html teamplate:
<h1>Project info</h1>
<p>Project ID: {{ project.project_id }} </p>
<p>Project Title: {{ project.project_title }} </p>
这给了我没有错误但没有数据。
错误是:
OPTIONS https://test.com/api/ 501 (Not Implemented)
Failed to load https://test.com/api/: Response for preflight has invalid HTTP status code 501.
如何使用此API以及这些POST参数来获取数据。
PS:我可以通过邮递员检索这些数据。
答案 0 :(得分:0)
经过一番研究,我发现在我的情况下,我应该在visual_recognition = VisualRecognitionV3(
version='2016-05-20',
api_key='###########################',
url='https://gateway.watsonplatform.net/visual-recognition/api')
classes = visual_recognition.classify(url='https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Cat_November_2010-1a.jpg/449px-Cat_November_2010-1a.jpg')
print(json.dumps(classes, indent=2)
中发送这些参数,如下所示:
FormData()
如果您使用getProjectInfo() {
const formData = new FormData();
formData.append('token', 'mytoken');
formData.append('content', 'project');
formData.append('format', 'json');
formData.append('returnFormat', 'json');
return this.http.post(this.baseUrl, formData).map(res => res.json()).catch(this.handleError);
}
,则只需删除HttpClient
运算符即可。