Получать данные из API, используя заголовки, включая имя пользователя и пароль GUID - PullRequest
0 голосов
/ 30 апреля 2019

Мне была поручена разработка веб-сайта, который опирается на получение данных о запасах транспортных средств из API. Ранее я разрабатывал с использованием различных API, но у меня действительно нет большого опыта в этой области, и этот API вызывает у меня головную боль! К сожалению, компания, которая создала API, довольно пугающая, враждебная и не желающая дать мне какое-либо представление о том, где я могу пойти не так. Несмотря на мою просьбу!

Ниже приведено то, что включено в руководство по API:

Запрос будет предоставлен посредством https-вызова на URL, предоставленный API_COMPANY.

Безопасность

Все 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 голосов
/ 30 апреля 2019

Вы пытались изменить свой заголовок аутентификации, чтобы представить их пример

Их пример:

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

...