我正在尝试向skyscanner发出交叉请求并获取一些信息。我研究了他们的doc,这就是我需要做的事情:
所以基本上有2个API调用。
这是我的代码:
export function getFlights() {
const request = axios.post(
'http://partners.api.skyscanner.net/apiservices/pricing/v1.0/',
JSON.stringify({
"cabinclass": "Economy",
"country": "UK",
"currency": "GBP",
.
.
.
.
"apikey": "apikey"
}),
{
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
.then(function (response) {
console.log(response.headers);
axios.get(response.headers.location + '?apiKey=apikey&stops=0&duration=360&includeCarriers=ba;u2;af').then(function(response) {
console.log(response)
})
})
.catch(function (error) {
console.log(error);
});
return {
type: GET_FLIGHT,
payload: request
};
}
所以我删除了一些查询参数并隐藏了api密钥。
我已经下载了allow-control-allow-origin
Chrome扩展程序,我还更改了主机文件:C:\Windows\System32\drivers\etc\hosts
,所以现在我通过测试域访问我的应用程序:http://testdomain.com:3000/
但是当我尝试获得结果时,我收到以下错误:
POST http://partners.api.skyscanner.net/apiservices/pricing/v1.0/ 405 (不允许的方法)
当我转到NETWORK TAB
并选择XHR
时,我看到v1.0/ partners.api.skyscanner.net/apiservices/pricing
是红色的,我可以看到headers
下方:
一般 响应标题 请求标题 表格数据,它(似乎)是一个带有我参数的航班??
我不确定我做错了什么,但是从文档和其他一切似乎我应该得到代码200,这是为了成功,但我一直得到405.有人可以向我解释我做错了什么?
答案 0 :(得分:2)
加载querystring
库后试试这个:
var querystring = require('querystring');
var data = {
cabinclass: 'Economy',
country: 'UK',
currency: 'GBP',
// ...
apikey: 'apikey' // be sure your API key is correct
};
var authOptions = {
method: 'POST',
url: 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0',
data: querystring.stringify(data),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
json: true
};
axios(authOptions)
.then(function(response){
console.log(response.data);
console.log(response.status);
axios.get(response.headers.location + '?apiKey=apikey&stops=0&duration=360&includeCarriers=ba;u2;af').then(function(response) {
console.log(response);
});
})
.catch(function(error){
console.log(error);
});
根据doc,尝试使用http://partners.api.skyscanner.net/apiservices/pricing/v1.0
代替http://partners.api.skyscanner.net/apiservices/pricing/v1.0/
(不使用 / )。