Я использую urllib.request в python, чтобы попытаться загрузить некоторую информацию о сборке из Teamcity. Этот запрос работал без имени пользователя и пароля, однако последнее изменение безопасности означает, что я должен использовать имя пользователя и пароль. Таким образом, я изменил пытался каждый из этих двух решений ниже:Ошибка HTTP 401: Несанкционированное использование urllib.request.urlopen
Покушение 1)
url = 'http://<domain>/httpAuth/app/rest/buildTypes/<buildlabel>/builds/running:false?count=1&start=0'
# create a password manager
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# Add the username and password.
top_level_url = "http://<domain>/httpAuth/app/rest/buildTypes/id:<buildlabel>/builds/running:false?count=1&start=0"
password_mgr.add_password(None, top_level_url, username, password)
handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
# create "opener" (OpenerDirector instance)
opener = urllib.request.build_opener(handler)
# use the opener to fetch a URL
opener.open(url)
Попытка 2
url = 'http://<username>:<password>@<domain>/httpAuth/app/rest/buildTypes/id:buildlabel/builds/running:false?count=1&start=0'
rest_api = urllib.request.urlopen(url)
Оба эти возвращения "HTTP Error 401: Несанкционированный". Однако, если я должен был напечатать «url» и скопировать этот вывод в браузер, ссылка работает отлично. Но при использовании через python я получаю вышеуказанную ошибку.
Я использую что-то очень похожее в другом скрипте Perl, и это отлично работает.
* решаемые НИЖЕ *
сервер может проверить другие элементы - как HTTP-заголовки, печенье, и т. д. Вы можете использовать DevTools в Chrome/Firefox, чтобы проверить, что браузер отправляет серверу - то есть. Заголовки HTTP. – furas