[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 #

    도움이 되셨다니 저의 보람입니다~ ^^
  • 진우 2020/03/02 16:42 # 삭제 답글

    php 에 요청 보내서 파일 다운로드 받는 방법 문의

    안녕하세요 한가지 문의좀 드립니다.

    https://moca-2080.com/bbs/download.php?bo_table=torrentseed&wr_id=8026&no=0
    위링크의 torrent 파일을 파이썬에서 요청을 보내서 다운로드 받으려는데
    파이썬 requests 나 urllib 를 써서 여러가지 방법으로 해봤지만 응답 html 문서만 받아지고
    torrent 파일은 안받아지네요 며칠동안 헤매고있습니다..

    아래와 같은 이미지 파일이나 웹페이지의 html 을 요청하면 굉장히 잘받아집니다.
    http://img.danawa.com/prod_img/500000/391/239/img/9239391_1.jpg?shrink=500:500&_v=20190916163433

    서버의 php 스크립트에 요청을 보낼때만 문제가 생기는데
    php 파일에 요청 보낼때에는 다른 방법이 필요한건지 궁금합니다.
  • 지훈현서아빠 2020/03/03 02:45 #

    https://stackoverflow.com/questions/20475552/python-requests-library-redirect-new-url
    혹시 해당 페이지가 Redirect 되는지 확인할 수도 있겠네요~ 참고해보십시오.
  • 진우 2020/03/03 20:37 # 삭제 답글

    아 redirect 인건가요?? 제가 웹을 잘몰라서요....ㅠ
    알겠습니다 링크 참고하겠습니다 답변 감사합니다!! ^^
댓글 입력 영역

구글애드텍스트