The problem seems be solved with urllib.request.urlretrieve() I think the binary information read() was giving had headers like content-size - but not HTTP headers. The first couple of bytes indicate how much content to read and after reading that content, the next set of bytes indicate the next chunk.