4

我正在尝试在 Python 中打开一个需要用户名和密码的 URL。我的具体实现如下所示:

http://char_user:char_pwd@casfcddb.example.com/......

我将以下错误吐到控制台:

httplib.InvalidURL: nonnumeric port: 'char_pwd@casfcddb.example.com'

我正在使用 urllib2.urlopen,但错误暗示它不理解用户凭据。它看到“:”并期望端口号而不是密码和实际地址。有什么想法我在这里做错了吗?

4

2 回答 2

10

改用 BasicAuthHandler 提供密码:

import urllib2

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, "http://casfcddb.xxx.com", "char_user", "char_pwd")
auth_handler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
urllib2.urlopen("http://casfcddb.xxx.com")

或使用请求库:

import requests
requests.get("http://casfcddb.xxx.com", auth=('char_user', 'char_pwd'))
于 2013-08-15T18:18:59.657 回答
0

我遇到了一种情况,我需要 BasicAuth 处理并且只有 urllib 可用(没有 urllib2 或请求)。Uku 的回答大多有效,但这是我的模组:

import urllib.request
url = 'https://your/url.xxx'
username = 'username'
password = 'password'
passman = urllib.request.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
auth_handler = urllib.request.HTTPBasicAuthHandler(passman)
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
resp = urllib.request.urlopen(url)
data = resp.read()
于 2017-06-04T14:04:30.223 回答