ReactJS 使用 POST 和 GET 发出跨域请求失败,代码为 405



我正在尝试向skyscanner发出cros请求并获取一些信息。我已经研究了他们的文档,这是我需要做的:

  1. 使用 POST 请求进行会话,
  2. 然后获取响应标头,
  3. 然后使用该 URL 发出 GET 请求,
  4. 以获取航班数据。

所以基本上有 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 密钥。

我已经下载了 chromeallow-control-allow-origin扩展名,并且我还更改了主机文件:C:WindowsSystem32driversetchosts,所以现在我正在通过测试域访问我的应用程序:http://testdomain.com:3000/

但是当我尝试获得结果时,出现以下错误:

邮编 http://partners.api.skyscanner.net/apiservices/pricing/v1.0/405 (方法不允许)

当我转到NETWORK TAB并选择XHR时,我看到v1.0/ partners.api.skyscanner.net/apiservices/pricing红色,在headers下我可以看到:

常规 响应标头 请求标头 表单数据,其中(似乎)带有我的参数的飞行??

我不确定我做错了什么,但从文档和其他所有内容来看,我应该获得代码 200,这是为了成功,但我不断得到 405。有人可以向我解释我做错了什么吗?

加载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);
});

根据文档,尝试使用http://partners.api.skyscanner.net/apiservices/pricing/v1.0而不是http://partners.api.skyscanner.net/apiservices/pricing/v1.0/(不带/)。

相关内容

  • 没有找到相关文章

最新更新