API-соединение с использованием Python - PullRequest
0 голосов
/ 09 октября 2018

Это мой первый опыт попытки подключиться к API через python (из окон) с использованием аутентификации Kerberos.Я работал над этим в течение нескольких дней, и мой прогресс застопорился.Вот лишь некоторые из ссылок, которые я использовал:

Это лучшее учебное пособие, которое я нашел, но, похоже, оно использует устаревший модуль, а неquesbskeros: http://python -notes.curiousefficiency.org / ru / latest / python_kerberos.html

https://pypi.org/project/requests-kerberos/

https://programtalk.com/python-examples/requests_kerberos.HTTPKerberosAuth/

Вот то, что я пробовал до сих пор (я будумаскировать конфиденциальную информацию):

import requests
from requests_kerberos import HTTPKerberosAuth
r=requests.get("https://apiServer.hadoop.company.com:23232/templeton/v1/ddl/database/",auth=HTTPSKerberosAuth)

Вот некоторые выходные данные:

r.status_code

401

r.headers

{'Content-Length ':' 1321 ',' Set-Cookie ':' hadoop.auth =;Path = /;HttpOnly ',' Server ':' Jetty (7.6.0.v20120127) ',' Cache-Control ':' must-revalidate, no-cache, no-store ',' Content-Type ':' text / html; charset= ISO-8859-1 ',' WWW-Authenticate ':' Обсудить '}

<code>r.text

<html>\n<head>\n<meta http-equiv="Content-Type" 
content="text/html;charset=ISO
-8859-1"/>\n<title>Error 401 Authentication 
required</title>\n</head>\n<body>\n<
h2>HTTP ERROR: 401</h2>\n<p>Problem accessing /templeton/v1/ddl/database/. 
Reason:\n<pre>    Authentication required
\ n Powered by Jetty: //

Указывает ли хоть что-нибудь из этого вывода, что сервер получает мой запрос?

Если я подключаюсь к API из нашей среды linux, используя curl, он работает просто отлично, и я получаю ожидаемый результат:

curl --negotiate -i -u :  'http://apiServer.hadoop.company.com:23232/templeton/v1/ddl/database/'

HTTP / 1.1 401 Требуется аутентификация WWW-Authenticate:Согласовать Set-Cookie: hadoop.auth =;Path = /;HttpOnly Cache-Control: необходимо повторно подтвердить, без кэширования, без хранения Тип содержимого: text / html; charset = ISO-8859-1 Длина содержимого: 1321 Сервер: Jetty (7.6.0.v20230127)

HTTP / 1.1 200 OK WWW-Authenticate: согласование YGY1cwVaADAgCAQ + iSTBHoAMCAReiQAQ + SF / nekePw09B / cboDrINa7qn + aENRuw2V + OW7Y7Rk9pOwGa8hrXC3rXKxCk = Set-Cookie: hadoop.auth = "и = SVC-QA-dsafqa-DEV & р = SVC-FD-itdflea-dev@hadoop.company.com&t=kerberos&e=15392343251&s=nWk/bFDbHQfsadfewe8PtjAsVHs= ";Path = /;HttpOnly Content-Type: application / json Transfer-Encoding: chunked Сервер: Jetty (7.6.0.v20120127)

Я понимаю, что в моем фундаментальном понимании аутентификации kerberos есть пробел, и япытаюсь провести ускоренный курс, но мне действительно просто нужно иметь возможность подключиться к этому API.Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 28 марта 2019

Вам нужно предоставить экземпляр HTTPSKerberosAuth, а не сам класс, поэтому ваш запрос должен быть:

r = requests.get("https://apiServer.com", auth=HTTPSKerberosAuth())

Обратите внимание на круглые скобки в HTTPSKerberosAuth().

...