1

这是我的代码

#!/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 添加新接口并缓存用户名/密码以供将来操作将花费太多时间来完成我的任务。不管怎么说,还是要谢谢你!

4

1 回答 1

1

看起来(错误假设一)配置目录可能不可写——尝试在调用时将显式路径传递给已知可写的配置目录Client

If that doesn't help (bug hypothesis number two) it may be that the serving is sending different realms for the two files (the fact that it's the same domain doesn't stop the server from doing that, though it would be a peculiar configuration choice or configuration error on the server's part... but then a server that fails due to "too many 401s" does have something peculiar anyway, so it's a suspect already;-).

于 2010-07-24T15:34:11.167 回答