如何扩展 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,无论连接如何,你都可以继续。