DID project error log - python

requests와 urllib

서버와 http 통신하기 위한 모듈

urllib

  • 빠르다.
  • header나 timeout 설정하는데 비교적 복잡하다
  • 데이터가 encoding 된채로 그대로와 decode()메소드로 변환해 주어야한다.
  • json화 하려면 json 모듈을 사용해야한다.

requests

  • import 속도가 urllib보다 느리다.
  • header 설정이나 timeout 설정등 여러 부가적 기능을 쉽게 설정할 수 있다.
  • 자동으로 header에서 encoding 값을 읽어와 데이터를 변환해준다.
  • json() 메소드로 받아온 data를 json 화 하기 쉽다.

progressbar

네트워크가 불안정해 파일 다운받는 과정을 볼 필요가 있었다. progressbar 모듈을 통해 쉽게 구현할 수 있다.

# progressbar 생성
pbar = progressbar.ProgressBar(maxval=total_length).start()
with open(download_path + file, 'ab') as output:
    block_num = resume_byte_pos / 1024
    for chunk in response.iter_content(chunk_size=1024):
        if chunk:
            block_num = block_num + 1
            output.write(chunk)
            if (block_num * 1024) < total_length:
                pbar.update(block_num * 1024)
pbar.finish()

파일 이어받기

네트워크가 불안정한 환경이라 큰 파일을 다운받을 때 끊기고 다시 처음부터 받는 현상이 생긴다.

http 요청 시 header에 Range 속성에서 얼마부터 데이터를 요청할 수 있다.

중간에 끊어진 파일의 크기를 구해 그때부터 받으면 이어받을 수 있다.

# 전에 받았던 파일의 크기
resume_byte_pos = os.stat(download_path + file).st_size
# header 설정
resume_header = {'Range': 'bytes=%d-' % resume_byte_pos}
response = requests.get(url,
                        headers=resume_header,
                        stream=True,
                        timeout=10)
김땡땡's blog

김땡땡's blog

김땡땡