带有URLLIB2的客户端摘要身份验证Python将不会记住授权头信息

带有URLLIB2的客户端摘要身份验证Python将不会记住授权头信息,python,authentication,urllib2,digest,Python,Authentication,Urllib2,Digest,我试图使用Python编写一个客户端,该客户端连接到使用摘要身份验证的自定义http服务器。我可以毫无问题地连接并拉取第一个请求。使用TCPDUMP(我在macosx上——我既是MAC又是pythonnoob),我可以看到第一个请求实际上是两个http请求,如果您熟悉RFC2617,您会想到这一点。第一个结果是401未经授权。从服务器发回的头信息被正确地用于为具有一些自定义授权头值的第二个请求生成头,这将生成200 OK响应和有效负载 一切都很好。多亏了urllib2,我的HTTPDigestA

我试图使用Python编写一个客户端,该客户端连接到使用摘要身份验证的自定义http服务器。我可以毫无问题地连接并拉取第一个请求。使用TCPDUMP(我在macosx上——我既是MAC又是pythonnoob),我可以看到第一个请求实际上是两个http请求,如果您熟悉RFC2617,您会想到这一点。第一个结果是401未经授权。从服务器发回的头信息被正确地用于为具有一些自定义授权头值的第二个请求生成头,这将生成200 OK响应和有效负载

一切都很好。多亏了urllib2,我的HTTPDigestAuthHandler开启器工作正常

在同一个程序中,我试图从同一个服务器请求第二个不同的页面。我预计,根据RFC,TCPDUMP这次将只显示一个请求,使用几乎所有相同的授权头信息(nc应该递增)

相反,它从头开始,首先得到401,然后重新生成200所需的信息

使用urllib2是否可以让具有摘要身份验证的后续请求循环使用已知的授权标头值,并且只执行一个请求

[重复几遍,直到它有意义为止,我不知道如何让它变得更简单]

谷歌的收益出人意料地少,所以我想不会。我查看了urllib2.py的代码,它非常凌乱(评论如:“这不是一个了不起的工作”),所以如果这是一个bug,我不会感到震惊。我注意到我的连接头是关闭的,即使我将其设置为keepalive,它也会被覆盖。这让我选择了keepalive.py,但这对我也不起作用

Pycurl也不行

我可以手工编写整个交互,但我希望尽可能利用现有的库

总之,使用urllib2和摘要身份验证是否可以从同一服务器获得2个页面,而只执行3个http请求(2个用于第一个页面,1个用于第二个页面)

如果你碰巧尝试过这个,并且已经知道这是不可能的,请让我知道。如果你有别的选择,我洗耳恭听


提前感谢。

虽然它不是现成的,但是
urllib2
足够灵活,可以自己添加它。子类
HTTPDigestAuthHandler
,破解它(
retry\u-http\u-digest\u-auth
方法),记住身份验证信息,并定义一个
http\u请求(self,request)
方法用于所有后续请求(添加WWW-Authenticate头)。

尽管它不是现成的,
urllib2
非常灵活,可以自己添加。子类
HTTPDigestAuthHandler
,对其进行破解(
retry\u-http\u-digest\u-auth
方法,我认为)以记住身份验证信息,并定义
http\u请求(self,request)
方法以将其用于所有后续请求(添加WWW-Authenticate头)