使用包括GUID用户名和密码的标头从API提取数据

时间:2019-04-30 09:35:10

标签: javascript json rest xmlhttprequest fetch-api

我被分配了一个开发网站的任务,该网站依赖于从API检索车辆库存数据。我以前使用各种AP​​I进行过开发,但是我在这方面确实没有很多经验,而该API令我有些头疼!不幸的是,构建API的公司非常恐怖,充满敌意,不愿向我提供有关我可能出问题的地方的任何见解。尽管我恳求!

以下是API指南中包含的内容:

该请求将通过https调用提供给API_COMPANY提供的URL。

安全性

所有API都希望在请求中提供以下http安全标头。所有详细信息将由API_COMPANY提供。每个经销商将具有唯一的OrganisatinalUnit_UID。

请求

GET
https://theurltotheapi.net/API/vehicles/stockstockListOptionModel.includenewvehicles=true
Accept: application/json
UserName: USERNAME
Password: PASSWORD
OrganisationalUnit_UID: UID
Host: MYWEBSITE.CO.UK
Accept-Encoding: gzip, deflate

我尝试了各种方法来检索API数据,包括XMLHttpRequest以及下面的Fetch方法。但是我不断收到控制台日志403错误?

<script src="link_to_credentials.js"></script>
<script>
const uri = 'https://theurltotheapi.net/API/vehicles/stock?stockListOptionModel.includenewvehicles=true';

let username = USERNAME;
let password = PASSWORD;
let h = new Headers(); 

h.append('Accept', 'application/json'); 
h.append('Authorization', 'Basic ' + window.btoa(username + ":" + password));
h.append('Accept-Encoding', 'gzip, deflate');
h.append('Host', 'WEBSITE');

let req = new Request(uri, {
method: 'GET',
headers: h,
OrganisationalUnit_UID: GUID,
mode:'no-cors'
});
fetch(req)
    .then ( (response)=>{
    if (response.ok){
        return response.json();
    }else{
            throw new Error('Could not fetch data');    
         }
})
.then( (jsonData) =>{
    console.log(jsonData);
})
.catch ( (err) =>{
    console.log('ERROR : ', err.message);
});
</script>

我原本希望在控制台中看到JSON车辆库存数据,但是却收到403禁止错误-

加载资源失败:服务器的响应状态为403(禁止)。

1 个答案:

答案 0 :(得分:0)

您是否尝试过更改身份验证标头以代表其示例

他们的典范:

GET https://theurltotheapi.net/API/vehicles/stockstockListOptionModel.includenewvehicles=true
Accept: application/json
UserName: USERNAME
Password: PASSWORD
OrganisationalUnit_UID: UID
Host: MYWEBSITE.CO.UK
Accept-Encoding: gzip, deflate

但是您只传递了以下标头:

Accept: application/json
Authorization: Basic <user:pass>
Accept-Encoding: gzip, deflate
Host: WEBSITE

尝试在下面的代码h.append('Host', 'WEBSITE');下添加代码

h.append('UserName', username);
h.append('Password', password);
h.append('OrganisationalUnit_UID', GUID);

并删除Authorization标头