如何使用Python3下载具有基本身份验证的Teamcity工件

如何使用Python3下载具有基本身份验证的Teamcity工件,python,teamcity-8.0,Python,Teamcity 8.0,我正在尝试使用Python3从teamcity下载一个zip工件,但运气不太好 在浏览器中,我通常会执行以下操作: 但是,如果我尝试使用urllib.request.urlretrieve执行此操作,我会得到一个关于无效端口的异常-因为它不知道附加到url前面的用户名和密码,并且正在解析作为端口的“:”之后-这很公平 所以我想我需要使用TeamCity的httpAuth工具和url 当我尝试,我得到一个404未经授权的,我期望,因为我需要提供用户名和密码 但我不知道怎么做 我补充说: aut

我正在尝试使用Python3从teamcity下载一个zip工件,但运气不太好

在浏览器中,我通常会执行以下操作:

但是,如果我尝试使用urllib.request.urlretrieve执行此操作,我会得到一个关于无效端口的异常-因为它不知道附加到url前面的用户名和密码,并且正在解析作为端口的“:”之后-这很公平

所以我想我需要使用TeamCity的httpAuth工具和url

当我尝试,我得到一个404未经授权的,我期望,因为我需要提供用户名和密码

但我不知道怎么做

我补充说:

auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(None,
                          uri=url_to_open,
                          user='userame',
                          passwd='password')
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
local_filename, headers = urllib.request.urlretrieve(url)
但我仍然收到HTTP错误401:Unauthorized


TIA。

您可以使用类似于
requests
的库,让您将基本身份设置为参数,请参阅此处的更多信息:

这很好用:

import urllib
from urllib.request import HTTPPasswordMgrWithDefaultRealm

pwdmgr = HTTPPasswordMgrWithDefaultRealm()
pwdmgr.add_password(None, uri=url, user='XXXX', passwd='XXXX')
auth_handler = urllib.request.HTTPBasicAuthHandler(pwdmgr)
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
local_filename, headers = urllib.request.urlretrieve(url)
我不完全清楚为什么新代码比旧代码更有效

仅供参考:请求代码也不起作用

response = requests.get('http://...', auth=HTTPBasicAuth('user', 'pass'), stream=True)
我不断收到未经授权的http错误

response = requests.get('http://...', auth=HTTPBasicAuth('user', 'pass'), stream=True)
import getpass
import subprocess

USERNAME = getpass.getuser()
PWD = getpass.getpass(prompt='PWD:', stream=None)
subprocess.run(['wget','http://'+USERNAME+':'+'PWD'+'@SERVER/httpAuth/repository/downloadAll/dood_dad/latest.lastSuccessful'])