Я пытаюсь запросить API github с помощью токена. Github API принимает сгенерированные токены при условии, что они отправлены в виде базового заголовка аутентификации.
API не возвращает HTTP 401, если вызов сделан без аутентификации, что означает, что если кто-то хочет запросить свой API с использованием базовой аутентификации, он должен предварительно заполнить заголовок, а не выполнять круговой обход.
Сейчас я пытаюсь запросить API, используя libsoup и Gjs.
Я заметил, что у SoupAuthManager есть функция, которая, кажется, идеально соответствует тому, что мне нужно (soup_auth_manager_use_auth здесь), но не могу найти способ вызвать его.
Это можно использовать для «предварительной загрузки» кеша аутентификации менеджера, чтобы избежать дополнительной двусторонней передачи HTTP в случае, когда вы заранее знаете, что будет возвращен ответ 401.
Это то, что я использую в настоящее время, но оно не работает, поскольку SoupAuthManager является частным объектом сеанса; и, следовательно, не влияет на фактическое поведение программы.
let httpSession = new Soup.Session();
let authUri = new Soup.URI(url);
authUri.set_user(this.handle);
authUri.set_password(this.token);
let message = new Soup.Message({method: 'GET', uri: authUri});
let authManager = new Soup.AuthManager();
let auth = new Soup.AuthBasic({host: 'api.github.com', realm: 'Github Api'});
authManager.use_auth(authUri, auth);
httpSession.queue_message(message, ...);
Существуют ли другие методы, которые я мог бы использовать для принудительной базовой аутентификации при первой поездке? или есть ли другая библиотека, которую я мог бы использовать из gjs для вызова API github и принудительной базовой аутентификации?