这是我的代码
#!/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”标头。
既然这两个 url 在同一个域中,为什么 pysvn 不直接在子序列会话中发送用户名/密码呢?
我有这个问题是因为我怀疑太多的 401 使我的 svn 服务器无法响应。并且 Eclipse 中的 svnkit 工作得很好,并自动发送“授权”标题。
编辑:致亚历克斯·马泰利:
尝试在调用 Client 时将显式路径传递给已知可写的配置目录。
试过了,不行
可能是服务正在为这两个文件发送不同的领域
两种反应的境界是一样的。
看起来 pysvn 从 libsvn 调用“svn_client_cat2()”,并且即使对于相同的 url 和相同的领域,此函数也不会在调用之间缓存用户名/密码。所以我认为我不能再解决这个问题了,为 libsvn 添加新接口并缓存用户名/密码以供将来操作将花费太多时间来完成我的任务。不管怎么说,还是要谢谢你!