4

Я написал сценарий Groovy для управления некоторыми репозиториями организаций в Github. Он работал отлично до нескольких недель назад, когда тот же скрипт начал сбой. Может быть, Github изменил некоторые аспекты их API? Или, может быть, я делаю что-то глупое. Я сузили проблему до этого упрощенного примера (требуется действительный github счет):401 Несанкционированный доступ для API Github с использованием HttpBuilder (Groovy)

@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 

Выход:

$ заводной GithubHttpBuilderTest.groovy
Имя пользователя: имя пользователя
Пароль:
Пойманный: groovyx.net.http.HttpResponseException: неавторизованный
groovyx.net.http.HttpResponseException: неавторизованный
at 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 (Unknown Source)
на GithubHttpBuilderTest.run (GithubHttpBuilderTest.groovy: 10)

Используя те же учетные данные, локон работы:

$ curl -u username https://api.github.com/user/emails 

Выход:

[
    "[email protected]"
]

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

EDIT: исправлена ​​ошибка в моем коде, где я обработал System.console().readPassword как строку вместо фактического возвращаемого типа: char []. К сожалению.

ответ

2

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"]) 
+0

Спасибо. Это была комбинация ошибок с моей стороны (обработка пароля с консоли как String, когда это на самом деле char []), и тот факт, что github.auth.basic, похоже, не работает. Теперь работает. Благодаря! – Burke

Смежные вопросы