Starting around July 2017 Vanguard seems to respond with an empty response now (but still a 200 return code signalling no error). To get the data you need to reissue the request with the cookies it sets in the response. I added this to my fork of ofx-ba-tfb.py:
response = res.read()
res.close()
--- start new code ---
# Vangaurd requres the request to have cookies it sets
# (returns empty 200 response the first time)
if (len(response) == 0):
cookies = res.getheader('Set-Cookie')
response_cookies = [c.split("; ")[0] for c in cookies.split(", ")]
h.request('POST', selector, query,
{ "Content-type": "application/x-ofx",
"Accept": "*/*, application/x-ofx",
"Cookie": "; ".join(response_cookies)
})
res = h.getresponse()
response = res.read()
res.close()
--- end new code ---
f = file(name,"w")
f.write(response)
f.close()