2016-09-09 7 views
0

나는이 질문에 대한 유용한 대답을 찾기 위해 하루 종일 여기에 있었지만 사용 사례에 적합한 것을 찾지 못했습니다.cert 인증 된 리소스에서 파이썬 요청으로 목록 파일 다운로드

인증을 위해 클라이언트 인증서를 검사하는 서버에서 여러 파일을 다운로드하려고합니다. 자동화 된 방식으로 다운로드하려는 특정 파일의 목록 배열도 있습니다. 파이썬 2.7 사용하고 있습니다. FileTwo.zip을 다운로드하기 위해 다시 돌아 가기 전에 FileOne.zip이 다운로드 될 때까지 기다리는 것이 좋습니다. 코드는 다음과 같습니다.

import requests 
import shutil 

dlList = ["FileOne.zip", "FileTwo.zip", "FileThree.zip"] 
cCert = r'C:\Temp\client_cert.pem' 
cKey = r'C:\Temp\client_key.pem' 

for i in dlList: 
    url = ("https://my.server.com/files/" + i) 
    r = requests.get(url, cert=(cCert, cKey), stream=True) 
    with open(i, "wb") as f: 
    r.raw.decode_content = True 
    shutil.copyfileobj(r.raw, f) 

인증서가 제대로 작동합니다. 나는 200 응답을 얻고있다.

그러나 실행할 때 스크립트는 FileOne.zip, FileTwo.zip 등의 디렉토리에 3 개의 파일을 생성하지만 각각 2K이고 파일 자체는 각각 수 백 MB입니다.

내가하고 싶은 것은 하나의 파일을 완성한 다음 다음 파일로 이동하는 것입니다. 그것이 작동하면 어떻게 멀티 쓰레딩하는지 알아낼 수 있습니다. 내가 사용하여 청크

대신

r.raw.decode_content = True 
shutil.copyfileobj(r.raw, f) 

의 :하지만 지금 난 그냥

가, 여기에 내가 그것을 해결하기 위해 무엇을했는지 확인이다

답변

0

... 제대로 파일을 내려 할

with open(i, "wb") as f: 
    for chunk in r.iter_content(chunk_size=1024): 
     if chunk: 
      f.write(chunk) 

솔직히 이것이 얼마나 효율적인지 모르겠지만 작동하는 것 같습니다. 이 방법을 강화하거나 동시 다운로드로 이동할 수있는 방법에 대한 조언은 언제나 행복 할 것입니다.