如何在pysvn中缓存用户名和密码

1 投票
1 回答
1568 浏览
提问于 2025-04-16 01:46

这是我的代码

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import pysvn
def main():
    client = pysvn.Client()
    client.callback_get_login = lambda realm, username, may_save:(True, "myusername", "mypasswd", True)
    print client.cat('http://svn.mydomain.com/file1.py')
    print client.cat('http://svn.mydomain.com/file2.py')
    return 0

if __name__ == "__main__":
    sys.exit(main())

我注意到,pysvn建立了两个HTTP会话,但在每个会话中,它首先尝试了一个没有“Authorization”头的OPTION方法,等服务器回复401后,它才发送“Authorization”头。

因为这两个网址在同一个域名下,为什么pysvn不直接在后续的会话中发送用户名和密码呢?

我有这个疑问是因为我怀疑太多的401错误让我的svn服务器无法响应。而在Eclipse中的svnkit工作得很好,能够自动发送“Authorization”头。

编辑:对Alex Martelli说:

尝试在调用Client时传递一个已知可写的配置目录的明确路径。

我试过了,但没用。

可能是服务器为这两个文件发送了不同的领域。

这两个响应的领域是相同的。

看起来pysvn调用了libsvn中的“svn_client_cat2()”函数,而这个函数在调用时并不会在同一个网址和相同领域之间缓存用户名和密码。所以我觉得我无法再对此问题做更多的事情,给libsvn添加新的接口并缓存用户名和密码以便将来使用会花费我太多时间。无论如何,还是谢谢你!

1 个回答

1

看起来(假设一)配置目录可能没有写权限——你可以尝试在调用Client时,指定一个已知可以写入的配置目录的路径。

如果这样做没有效果(假设二),可能是服务器为这两个文件发送了不同的“领域”(即使它们在同一个域名下,服务器也可能这样做,不过这通常是服务器配置上的奇怪选择或错误……但如果服务器因为“401错误太多”而出问题,那本身就已经很奇怪了,所以这也是一个可疑的地方;-)。

撰写回答