[Python] requests에서 file://... 로컬 URL 내용 가져오기 Develop Tip

URL 에 보면,
"http://host:port/rel_path/..." 와 같은 식으로 해당 내용을 HTTP로 가져올 수도 있고,
"file://..." 과 같이 로컬에 있는 파일을 가져 올 수도 있습니다.

그런데 파이썬의 requests 모듈에도 그런 방법이 디폴트로 있나 확인해 보았더니 없더군요.
이럴 때 사용할 수 있는 모듈이 requests-file 이라는 것이 있었습니다.

간단히 다음과 같이 설치하고,

pip install requests-file

다음과 같이 간단한 샘플로 잘 동작합니다.

import requests
from requests_file import FileAdapter

s = requests.Session()
s.mount('file://', FileAdapter())

resp = s.get('file:///etc/hosts')
print(resp)
if resp.status_code // 100 == 2:
    print(resp.text)

rs = requests.Session()
resp = rs.get('http://localhost:8000/setup.py')
print(resp)
if resp.status_code // 100 == 2:
    print(resp.text)

이것을 좀 더 모듈화 시켜 보았습니다.

def get_url_contents(url):
    s = None
    try:
        s = requests.Session()
        if url.lower().startswith('file://'):
            s.mount('file://', FileAdapter())
            resp = s.get(url)
        else:
            resp = s.get(url)
        return resp.status_code, resp.text
    finally:
        if s is not None:
            s.close()

테스트는 다음과 같이 합니다.

def test_02():
    url = 'file:///etc/hosts'
    sc, fc = get_url_contents(url)
    print('url="%s"\nsc=%s\nfc=<%s>' % (url, sc, fc))

    url = 'http://localhost:8000/setup.py'
    sc, fc = get_url_contents(url)
    print('url="%s"\nsc=%s\nfc=<%s>' % (url, sc, fc))

if __name__ == '__main__':
    test_02()


어느 분께는 도움이 되셨기를 ..

덧글

  • sundlee 2018/05/22 11:29 # 삭제 답글

    도움이 되었습니다. 감사합니다.
  • 지훈현서아빠 2018/05/22 15:01 #

    도움이 되셨다니 저의 보람입니다..
  • 마늘갈릭빵 2019/11/12 20:56 # 삭제 답글

    덕분에 고생을 덜었습니다. 감사합니다!
  • 지훈현서아빠 2019/11/12 22:34 #

    도움이 되셨다니 저의 보람입니다~ ^^
댓글 입력 영역

구글애드텍스트