0%

Django 웹 라이브러리 - (1) urllib

urllib ?

  • 웹 클라이언트를 작성하는 데 사용되는 모듈들 중에 가장 빈번하게 사용하는 모듈
  • HTTP 서버 뿐만 아니라, FTP 서버 및 로컬 파일 등을 처리한다.
  • 클라이언트에서 공통적으로 필요한 함수와 클래스 등을 제공한다.
  • 주로 URL 처리와 서버 액세스 관련 API를 제공한다.

urllib.parse

URL의 분해, 조립, 변경 및 URL 문자 인코딩, 디코딩 등을 처리한다.

예문

1
2
3
4
from urllib.parse import urlparse
result = urlparse("http://www.python.org/guide/python.html;philosophy?overall=3#n10")

result

결과

1
2
3
ParseResult(scheme='http', netloc='www.python.org',
path='/guide/python.html', params='philosophy',
query='overall=3',fragment='n10')

urlsplit(), urljoin(), parse_qs(), quote(), encode() 함수 등이 있다.

ParseResult 클래스 속성

  • scheme : URL에서 사용된 프로토콜
  • netloc : Network Location, user:password@host:port 형식으로 표현 (HTTP 프로토콜은 host:port 로 표현)
  • path : 파일이나 애플리케이션 경로
  • params: 애플리케이션에 전달될 매개변수 (현재는 사용되지 않음)
  • query : 질의 문자열 또는 매개변수, & 로 구분된 이름=값 의 쌍 형식으로 표현
  • fragment : 문서 내의 앵커 등 조각을 지정

urllib.request

주어진 URL에서 데이터를 가져오는 기본 기능 제공함.

urlopen 함수 형식

urlopen(url, data=None, [timeout])
  • url : 문자열로 직접 지정하거나, Request 클래스의 인스턴스로 지정 가능. 또는 file 스키마를 지정하여 로컬 파일을 열 수 있음.
    • PUT, HEAD 메소드 등, 헤더 조작이 필요할 때는 Request 클래스를 같이 사용한다.
  • GET 방식이 기본값
  • data : 질의 문자열을 지정하여 POST로 보냄. bytes 타입이어야한다.
  • timeout : 타임아웃 시간 (단위는 seconds)
  • 인증/쿠키/프록시 등의 복잡한 요청 처리는 해당 핸들러 클래스를 같이 사용해야한다.

urlopen 사용 예시

1
2
3
from urllib.request import urlopen
f = urlopen("https://www.examples.com")
print(f.read(500).decode('utf-8')

urlopen POST 요청

1
2
3
4
from urllib.request import urlopen
data = "language=python&framework=django"
f = urlopen("http://127.0.0.1:8000", bytes(data, encoding='utf-8'))
print(f.read(500).decode('utf-8'))

Request 클래스로 요청 헤더 지정

1
2
3
4
5
6
7
8
9
10
11
12
from urllib.request import urlopen, Request
from urllib.parse import urlencode

url = 'http://127.0.0.1:8000'
data = {
'name':'wgl',
'url':'https://wgtech.dev'
}

encData = urlencode(data)
postData = bytes(encData, encoding='utf-8')
req = Request(url, data=postData)

참고) 파이썬 웹 프로그래밍(한빛미디어)