HTTP错误401:未经授权使用urllib.request.urlopen

2024-06-17 07:53:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中使用urllib.request尝试从Teamcity下载一些构建信息。这个请求过去没有用户名和密码,但是最近的安全性更改意味着我必须使用用户名和密码。因此,我改变了以下两种解决方案:

尝试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:Unauthorized”。不过,如果我要打印“url”并将此输出复制到浏览器中,则链接工作正常。但是当通过python使用时,我得到了上面的错误。

我在另一个Perl脚本中使用了一些非常相似的东西,这也非常有效。

*在下面解决*


Tags: restfalseapphttpurlrequestdomainpassword
1条回答
网友
1楼 · 发布于 2024-06-17 07:53:21

解决了这个问题。

credentials(url, username, password)
rest_api = urllib2.urlopen(url)
latest_build_info = rest_api.read()
latest_build_info = latest_build_info.decode("UTF-8")
# Then parse this xml for the information I want. 

def credentials(self, url, username, password):
    p = urllib2.HTTPPasswordMgrWithDefaultRealm()
    p.add_password(None, url, username, password)
    handler = urllib2.HTTPBasicAuthHandler(p)
    opener = urllib2.build_opener(handler)
    urllib2.install_opener(opener)

另外,我想下载一个文件。。

credentials(url, username, password)
urllib2.urlretrieve(url, downloaded_file)

其中Url是:

http://<teamcityServer>/repository/download/<build Label>/<BuildID>:id/Filename.zip

相关问题 更多 >