【发布时间】:2014-03-21 16:52:00
【问题描述】:
我需要 HTTP 基本身份验证才能进行 REST 调用。在用户名中,我必须提供一个域(有一个连字符),然后是一个反斜杠来将其与用户名分开,如下所示:DOM-AIN\user_name。那么密码是相当良性的。
这适用于 curl:
curl 'https://DOM-AIN\user_name:password@myurl.com'
我现在需要把它放到 Python 中,但是我已经尝试了 requests 和 urllib/2/3...他们不喜欢 \ :或 @。即使我将 URL 编码为 %40 等,这些也会被解释为实际的 : 并且 urllib 认为我正在尝试定义一个端口并且我收到一个错误:我认为无效的套接字,我忘记了。
所以我尝试使用 urllib3 在标头中传递用户名和密码,但我收到未经授权的访问错误,我怀疑这是因为我需要以某种方式对标头中的用户名进行编码以说明反斜杠 (%5C),但是这似乎也不起作用。
下面是一些不起作用的代码:
# Attempt 1
http = urllib3.PoolManager()
url1 = https://ws.....
headers = urllib3.util.make_headers(basic_auth='DOM-AIN\user_name:password')
r1 = http.request('GET', url1, headers=headers)
response = r1.data
# Attempt 2
passwordManager = urllib2.HTTPPasswordMgrWithDefaultRealm()
passwordManager.add_password(None, url, 'DOM-AIN\user_name, password)
authenticationHandler = urllib2.HTTPBasicAuthHandler(passwordManager)
opener = urllib2.build_opener(authenticationHandler)
data = opener.open(url1)
还有一些其他的请求尝试,但我不再有这些了。如果有用的话,我可以得到这些错误,但如果已经知道我做错了,那就太好了......
【问题讨论】:
标签: python curl request urllib2 urllib