반응형
웹을 이용해서 파일을 다운로드하였을때, 파일이름에 대한 정보가 필요한 경우가 있다.
이때 유용하게 사용할 수 있는 헤더 정보가 있는데, 바로 Content-Disposition 이다.
Content-Disposition 에는 보통 파일 이름 정보를 함께 보내주는 경우가 있다. 하지만 한글인 경우 UTF-8로 디코딩을 해야 정상적으로 확인이 가능하다. 여러가지로 코드를 테스트해본 결과 unquote를 활용하여 디코딩이 가능하다는 것을 알게 되었는데, 아래 코드를 이용해서 파일 이름정보를 가져올 수 있다.
from urllib import parse
def get_filename(source_header):
fname = re.findall("filename\*=([^;]+)", source_header, flags=re.IGNORECASE)
if not fname:
fname = re.findall("filename=([^;]+)", source_header, flags=re.IGNORECASE)
if "utf-8''" in fname[0].lower():
fname = re.sub("utf-8''", '', fname[0], flags=re.IGNORECASE)
fname = parse.unquote(fname)
else:
fname = fname[0]
return fname
헤더는 아래와 같이 requests로 받아온 결과를 이용할 수 있다.
#'attachment; filename="\\uc911\\ud654\\uc694\\ub9ac \\ub3c4\\uc6d0.zip"; filename*=UTF-8\'\'올엠.zip'
filename = get_filename(fname_resp.headers["Content-Disposition"])
안전을 위해서 Content-Disposition 가 있는지 확인하는 코드를 추가하면 좋다.
반응형
'Python' 카테고리의 다른 글
Python - Missing optional dependency 'openpyxl' 해결 (0) | 2024.02.29 |
---|---|
Python - URL, WebContent Encode / Decode 하기 (0) | 2024.02.29 |
Python - Error cv2 (-215:Assertion failed) !ssize.empty() in function 'resize' (0) | 2024.02.29 |
Docker - exec, 컨테이너 명령 실행/세션 연결 (0) | 2024.02.28 |
JIRA - 이슈 벌크 삭제(Bulk Delete) API (0) | 2024.02.28 |