我需要对HTTP服务器执行先发制人的基本身份验证,即无需等待401响应就立即进行身份验证。这能用httplib2来完成吗?
编辑:
我通过在请求中添加一个授权头来解决这个问题,正如接受的答案中所建议的那样:
headers["Authorization"] = "Basic {0}".format(
base64.b64encode("{0}:{1}".format(username, password)))发布于 2011-08-16 11:33:05
向初始请求中添加适当格式的“授权”标题。
发布于 2011-11-22 18:40:43
这也适用于内置的httplib (对于任何希望最小化第三方库/模块的人)。我使用它与Jenkins服务器进行身份验证,使用Jenkins可以为每个用户创建的API令牌。
>>> import base64, httplib
>>> headers = {}
>>> headers["Authorization"] = "Basic {0}".format(
base64.b64encode("{0}:{1}".format('<username>', '<jenkins_API_token>')))
>>> ## Enable the job
>>> conn = httplib.HTTPConnection('jenkins.myserver.net')
>>> conn.request('POST', '/job/Foo-trunk/enable', None, headers)
>>> resp = conn.getresponse()
>>> resp.status
302
>>> ## Disable the job
>>> conn = httplib.HTTPConnection('jenkins.myserver.net')
>>> conn.request('POST', '/job/Foo-trunk/disable', None, headers)
>>> resp = conn.getresponse()
>>> resp.status
302发布于 2014-03-05 16:26:18
我意识到这是一个古老的问题,但我想如果您在httplib2中使用Python3,我会提供解决方案,因为我在其他地方都找不到它。我还使用每个Jenkins用户的API令牌对Jenkins服务器进行身份验证。如果您不关心Jenkins,只需将实际用户的密码替换为API令牌即可。
b64encode期待一个二进制字符串的ASCII字符。使用Python3时,如果传入一个普通字符串,就会引发TypeError。为了解决这个问题,报头的"user:api_token“部分必须使用'ascii‘或'utf-8’进行编码,然后传递给b64encode,然后必须将产生的字节字符串解码为一个普通字符串,然后再放入标头中。以下代码完成了我所需的工作:
import httplib2, base64
cred = base64.b64encode("{0}:{1}".format(
<user>, <api_token>).encode('utf-8')).decode()
headers = {'Authorization': "Basic %s" % cred}
h = httplib2.Http('.cache')
response, content = h.request("http://my.jenkins.server/job/my_job/enable",
"GET", headers=headers)https://stackoverflow.com/questions/7077475
复制相似问题