如何扩展 urllib3 连接创建以添加额外的身份验证步骤?
How to extend urllib3 connection creation to add additional authentication step?
我想创建一个到 https 端点的连接池,在池中创建每个 https 连接后执行添加步骤。步骤是像这样制作 https call:
POST /_session HTTP/1.1
Content-Length: 32
Content-Type: application/x-www-form-urlencoded
Accept: */*
name=YourUserName&password=YourPassword
如果成功,将返回一个 cookie 作为响应,例如:
200 OK
Cache-Control: must-revalidate
Content-Length: 42
Content-Type: text/plain; charset=UTF-8
Date: Mon, 04 Mar 2013 14:06:11 GMT
server: CouchDB/1.0.2 (Erlang OTP/R14B)
Set-Cookie: AuthSession="a2ltc3RlYmVsOjUxMzRBQTUzOtiY2_IDUIdsTJEVNEjObAbyhrgz"; Expires=Tue, 05 Mar 2013 14:06:11 GMT; Max-Age=86400; Path=/; HttpOnly; Version=1
x-couch-request-id: a638431d
这个额外的步骤会去哪里?例如,也许我应该扩展 _new_conn 方法?
class CustomHTTPSConnectionPool(HTTPSConnectionPool):
def _new_conn(self):
conn = super(CustomHTTPSConnectionPool, self)._new_conn()
... call '/_session' and save cookie
return conn
另一个考虑因素是 cookie 将过期并且应该更新,最好在过期之前更新。我只是在这里注意到它,这可能应该是一个单独问题的主题。
(如评论中讨论)
如果您正在尝试创建自己的 CustomHTTPSConnectionPool,那么您的方向是对的。
但是阅读您链接的文档,我认为您不需要这个?看起来状态是在 cookie 中而不是连接中维护的,所以你只需要进行握手,获取 cookie,并确保你在每个请求中传递 cookie,无论连接如何,你都可以继续。
我想创建一个到 https 端点的连接池,在池中创建每个 https 连接后执行添加步骤。步骤是像这样制作 https call:
POST /_session HTTP/1.1
Content-Length: 32
Content-Type: application/x-www-form-urlencoded
Accept: */*
name=YourUserName&password=YourPassword
如果成功,将返回一个 cookie 作为响应,例如:
200 OK
Cache-Control: must-revalidate
Content-Length: 42
Content-Type: text/plain; charset=UTF-8
Date: Mon, 04 Mar 2013 14:06:11 GMT
server: CouchDB/1.0.2 (Erlang OTP/R14B)
Set-Cookie: AuthSession="a2ltc3RlYmVsOjUxMzRBQTUzOtiY2_IDUIdsTJEVNEjObAbyhrgz"; Expires=Tue, 05 Mar 2013 14:06:11 GMT; Max-Age=86400; Path=/; HttpOnly; Version=1
x-couch-request-id: a638431d
这个额外的步骤会去哪里?例如,也许我应该扩展 _new_conn 方法?
class CustomHTTPSConnectionPool(HTTPSConnectionPool):
def _new_conn(self):
conn = super(CustomHTTPSConnectionPool, self)._new_conn()
... call '/_session' and save cookie
return conn
另一个考虑因素是 cookie 将过期并且应该更新,最好在过期之前更新。我只是在这里注意到它,这可能应该是一个单独问题的主题。
(如评论中讨论)
如果您正在尝试创建自己的 CustomHTTPSConnectionPool,那么您的方向是对的。
但是阅读您链接的文档,我认为您不需要这个?看起来状态是在 cookie 中而不是连接中维护的,所以你只需要进行握手,获取 cookie,并确保你在每个请求中传递 cookie,无论连接如何,你都可以继续。