401 Несанкционированный доступ к Github API с использованием HttpBuilder (Groovy)

Я написал скрипт 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

Вывод:

[
"[email protected]"
]

Я что-то упустил в том, как правильно пройти аутентификацию в Github API с помощью HttpBuilder?

РЕДАКТИРОВАТЬ: исправлена ​​ошибка в моем коде, где я рассматривал System.console().readPassword как строку вместо фактического возвращаемого типа: char[]. Упс.


person Burke    schedule 15.07.2013    source источник


Ответы (1)


github.auth.basic username, password не работает, вам нужно установить его вручную:

String userPassBase64 = "$username:$password".toString().bytes.encodeBase64()    
def github = new HTTPBuilder('https://api.github.com')
def emails = github.get(path: '/user/emails', headers: ["Authorization": "Basic $userPassBase64"])
person moskiteau    schedule 15.07.2013
comment
Спасибо. Это была комбинация моей ошибки (обработка пароля из консоли как строки, хотя на самом деле это char[]) и того факта, что github.auth.basic, похоже, не работает. Теперь работает. Спасибо! - person Burke; 15.07.2013