Autheate Github частного репо в python - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу проверить, является ли данная комбинация URL репо, ИД пользователя и пароля действительной или нет. Я использую запрос для этого. Ниже приведен мой python код:

requests.get('https://github.com/geetikatalreja/WebApp_DotNet.git', auth = ('valid_username', 'Valid_password'))

или

requests.get('https://github.com/geetikatalreja/WebApp_DotNet.git', auth=HTTPBasicAuth('valid_username', 'Valid_password'))

Оба оператора возвращают код ошибки 401. Код ошибки 401 возникает, когда требуется аутентификация, но она не прошла или не прошла пока не предоставлено, но я могу войти, используя те же учетные данные и URL-адрес из пользовательского интерфейса Github.

Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2020

Этот тип аутентификации работает, если вы используете GitHub API, но вы не можете использовать веб-интерфейс с базовой аутентификацией c.

Обычно веб-интерфейс использует форму входа, которая отправляет запрос POST, когда вы войти в систему. После этого сессионный повар ie используется для того, чтобы оставаться в системе (для сеанса). Если логин должен сохраняться после истечения сеанса, веб-сайт может использовать файлы cookie, которые сохраняются дольше. Я думаю, что GitHub использует эту концепцию.

Я бы порекомендовал вам использовать API для автоматизированных процессов, потому что вы можете легче анализировать ответы.

Кроме того, я настоятельно рекомендую не использовать basi c аутентификация с реальным паролем. Вместо этого я бы использовал PAT.

Если вы хотите отправлять аутентифицированные запросы в API, вы можете, например, выполнить

requests.get('https://api.github.com/repos/geetikatalreja/WebApp_DotNet', auth = ('valid_username', 'Valid_password'))

Вместо пароля, вы также можете просто использовать PAT своей учетной записи. (что более безопасно). Вы можете создать PAT там .

Документацию по GitHub API можно найти здесь и документацию для доступа к репозиториям там .

0 голосов
/ 12 февраля 2020

Вместо этого используйте аутентификацию на основе токена. Вот ссылка для получения личного токена от github

https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line

Получив токен, вы можете -

  1. Вход в систему из командной строки
    $ git clone https://github.com/geetikatalreja/WebApp_DotNet.git
    Username: your_username
    Password: your_token
Вход с использованием кода (Python модуль urllib2)
    url = "https://api.github.com/geetikatalreja/WebApp_DotNet.git/:owner/:repo/pulls/:number"
    token = "your_token"

    request = Request(url)
    request.add_header('Authorization', 'token %s' % token)
    response = urlopen(request) 
Вход в систему с использованием python модуля запроса
    import requests
    url = "https://github.com/geetikatalreja"
    response = requests.get(url, headers={'Authorization': 'your_token'})

НО по какой-то причине, если вам необходимо войти в систему, используя имя пользователя / пароль, вы можете использовать следующий код

Отказ от ответственности : код не проверен, скопирован с здесь . Этот код не использует API вместо анализа веб-страницы и входа в систему

    s = requests.Session()
    r = s.get('https://www.github.com/login')
    tree = html.fromstring(r.content)
    data = {i.get('name'):i.get('value') for i in tree.cssselect('input')}
    data['login'] = username
    data['password'] = password
    r = s.post('https://github.com/session', data=data)
0 голосов
/ 12 февраля 2020

Вы можете передать тип носителя application/vnd.github.VERSION.diff, чтобы получить diff. Таким образом,

requests.get('https://api.github.com/geetikatalreja/WebApp_DotNet.git/:owner/:repo/pulls/:number', auth = ('valid_username', 'Valid_password'))

должен иметь формат

requests.get('https://api.github.com/repos/:owner/:repo/pulls/:number', auth = ('valid_username', 'Valid_password'), headers=headers)

, где

headers = {
    'Authorization': 'token mygithubtoken',
    'Accept': 'application/vnd.github.VERSION.diff',
}

Мы не можем использовать токены OAuth для доступа к веб-сайту. Однако различия доступны через API:

https://developer.github.com/v3/pulls/#get -a-single-pull-request

...