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

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()


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

[Python] Windows COM (ActiveX) client 사용

기존에 어떤 라이브러리가 윈도우에서 Active-X로 작성되어 설치되어 있다고 가정합니다.그러면 MS의 인터넷 익스플로러를 이용해서 이 ActiveX를 JavaScript에서 사용해 온 경우가 무척이 많습니다.그런데 필요에 따라 기존에 MSIE에서 ActiveX 부분만을 따로 떼어 무언가 작업을 하고,웹 부분은 HTML5 표준으로 만들어야 한다... » 내용보기

[Python] decorator를 이용한 함수의 doc string 구하기

파이썬에서 데코레이터에 대한 고찰을 확인해 본 적이 있습니다만,아래와 같은 아주 간단한 데코레이터를 이용한 foo 라는 함수가 있다고 가정합니다.def decorator1(f):    def _decorator():        print('decorator active')    &... » 내용보기

[Python] PyCharm에서 임의의 코드를 디버깅하는 방법

파이썬에서 특정 문자열의 코드를 수행시키려면,exec(...) 빌트인 함수를 이용합니다.예를 들어,code = """def myrun():    def sum(i, j):        return i + j        # pdb.set_trace()&nb... » 내용보기

[Python] 파이썬 클라이언트로 PHP Web Service 간단 호출

굳이 언급을 하지 않더라도, 최근에는 RESTful API 가 대세입니다.프런트엔드와 백엔드를 나누는 관문이라고 할 수도 있겠습니다.그 이전에 물론 SOAP, WebService 등이 있었기는 했었지요.더 거슬러 올라가면 RPC (Remote Procedure Call) 까지 가기는 합니다.뭐 아직도 파이썬 기본 라이브러리에 XMLRPC가 존재하는 것은... » 내용보기

구글애드텍스트