Я написал скрипт Groovy для управления репозиториями некоторых организаций на Github. Он отлично работал до тех пор, пока несколько недель назад тот же скрипт не начал давать сбой. Может быть, Github изменил какой-то аспект своего API? Или, может быть, я делаю что-то глупое. Я сузил проблему до этого упрощенного примера (требуется действующая учетная запись github):
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6' )
import groovyx.net.http.HTTPBuilder
String username = System.console().readLine 'Username: '
char[] password = System.console().readPassword 'Password: '
def github = new HTTPBuilder('https://api.github.com')
github.auth.basic username, password.toString()
def emails = github.get(path: '/user/emails',
headers: ['Accept': 'application/json', 'User-Agent': 'Apache HTTPClient'])
println emails
Вывод:
$ groovy GithubHttpBuilderTest.groovy
Имя пользователя: имя пользователя
Пароль:
Поймано: groovyx.net.http.HttpResponseException: Unauthorized
groovyx.net.http.HttpResponseException: Unauthorized
на groovyx.net.http.HTTPBuilder.defaultFailureHandler(HTTPBuilder.java:652)
на groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:508)
на groovyx.net.http.HTTPBuilder .get(HTTPBuilder.java:292)
на groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:262)
на groovyx.net.http.HTTPBuilder$get.call(неизвестный источник)
в GithubHttpBuilderTest.run(GithubHttpBuilderTest.groovy:10)
Используя те же учетные данные, curl работает:
$ curl -u username https://api.github.com/user/emails
Вывод:
Я что-то упустил в том, как правильно пройти аутентификацию в Github API с помощью HttpBuilder?
РЕДАКТИРОВАТЬ: исправлена ошибка в моем коде, где я рассматривал
System.console().readPassword
как строку вместо фактического возвращаемого типа: char[]. Упс.