我想访问TFS服务器,并定期下载动态生成的“Scrum Burndown图表”,以便在单独的报告中重复使用它(即pdf) 是的,有很多报道都在进行......
如何在要下载的服务器中找到正确的URL,以及如何解决权限问题?
答案 0 :(得分:2)
这是我自己回答的一个问题。
流程摘要
没有直接的网址,即我不能要求reportserver / myteam / burndownchart / 20110815(很好,很安静)但是有一个param样式请求 包装“报告”到我想要的图像。遗憾的是,没有简单的方法可以在VS2010扩展中找到它 - 我使用Charles调试器代理来查看VS2010正在发送的内容。
您需要直接访问您的团队报告的网址类似于 http://tfs.example.com/reportserver?/TfsReports/ExampleCompany/ExampleProject/Sprint+Burndown+Chart&rc:toolbar=false&pReleaseWorkStreamPath= \ Release01 \&安培; pSprintTeam = \ Release02 \ Sprint01 \ Team01
有一些基于会话的混淆与实际图像URL一起进行,这意味着我必须调用然后解析报告页面,找到图像的URL,然后下载它。最重要的是,我需要让Python使用Windows身份验证,并且通常摆弄很多东西
下面的进程是合理的,但代码很脆弱,我只是推荐它作为起点
安装py-ntlm(http://code.google.com/p/python-ntlm/)
(a)你需要每次创建一个用户传递哈希值和请求的URL(这通常是浏览器不可见) (b)然后将它作为urllib2处理程序传递给urllib2 (c)像往常一样通过urllib2处理网址
import urllib2
from ntlm import HTTPNtlmAuthHandler
#
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password) ## (a)
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) #(b)
opener = urllib2.build_opener(auth_NTLM)
urllib2.install_opener(opener) # (c)
response = urllib2.urlopen(url_moi)
html = response.read()
这样就可以获得标准报告网页,其中包含图片。我现在需要提取该图像URL,我使用正则表达式获取 所有IMG标签,并采取列表中的第二个。专业而且根本不脆: - )
然后我们重建了nltm哈希(我已经下载了HTML报告页面,现在我想要其中的JPG图像), 调用上面的URL并将输出写入本地磁盘。
我希望有所帮助。
YMMV