파이썬 URL 요청 오류 처리하기
들어가며
파이썬에서 URL 요청을 보내는 방법은 urllib 또는 requests 모듈 등이 있습니다. 하지만 신뢰성있는 URL 요청 코드를 작성하기 위해서는 다양한 에러문제에 대한 예외처리가 필요합니다. 이번 포스팅에서는 URL 요청 중 발생하는 다양한 오류들에 대하여 해결방법을 제시하겠습니다.
urllib 모듈을 이용한 URL 요청 오류
Python 3.x 버전에서는 urllib 모듈을 사용할 때, URL 요청 시 요청 헤더 등을 암호화하는 방법이 있습니다. 하지만 URL 요청 시에 발생하는 다양한 오류 상황에 대하여 처리하지 않을 경우, 웹 서비스로부터 데이터를 받아오는 것이 불가능할 수도 있습니다. 그러므로, urllib 모듈을 사용하는 URL 요청 코드에서 발생하는 다양한 오류를 처리해보겠습니다.
1. 요청한 URL이 존재하지 않음
요청한 URL이 존재하지 않을 경우, urllib.error.HTTPError 예외가 발생합니다. 이 때, 예외처리를 통해 해당 오류를 처리할 수 있습니다.
“`python
from urllib.request import urlopen
from urllib.error import HTTPError, URLError
try:
url = urlopen(‘https://example.com/page1.htm’)
except HTTPError as e:
print(‘HTTP 오류 발생 : ‘ + str(e.code))
except URLError as e:
print(‘URL 오류 발생 : ‘ + str(e.reason))
else:
print(url.read())
“`
2. URL 요청이 시간 초과됨
URL 요청 시 시간 초과 오류가 발생할 수 있습니다. 이때는 역시 예외처리를 해야합니다. 다음은 urllib 모듈을 이용한 시간 초과 처리 예시입니다.
“`python
import urllib.request
req = urllib.request.urlopen(‘http://www.example.com’, timeout=2)
“`
3. 요청한 URL의 프로토콜 오류
요청한 URL의 프로토콜이 잘못되어 발생하는 오류도 있습니다. urllib.error.URLError 예외를 처리해주면 됩니다.
“`python
from urllib.request import urlopen
from urllib.error import HTTPError, URLError
try:
url = urlopen(‘ftp://example.com/page1.htm’)
except URLError as e:
print(e.reason)
“`
requests 모듈을 이용한 URL 요청 오류
urllib 모듈과 함께 많이 사용되는 requests 모듈로도 URL 요청을 쉽게 보낼 수 있습니다. 그러나 requests 모듈에서도 오류가 발생할 가능성은 항상 존재합니다. 이번에는 requests 모듈에 대한 URL 요청 오류 처리 방법에 대해 알아보겠습니다.
1. 비정상적인 응답 코드
웹 서버에서 받아온 응답 코드가 정상적이지 않은 경우가 있을 수 있습니다. requests 모듈에서 응답코드에 대한 처리를 어떻게 해야하는지 알아봅시다.
“`python
import requests
response = requests.get(‘https://www.example.com/’)
if response.status_code != requests.codes.ok:
print(“응답 코드 : {}”.format(response.status_code))
“`
2. URL 접근 권한 오류
URL 접근 권한이 없는 경우에는 예외처리를 해줘야 합니다. 그렇지 않을 경우에는 인증되지 않은 접근 만료됨 오류가 발생합니다.
“`python
import requests
response = requests.get(‘https://www.example.com/’,
auth=(‘user’, ‘pass’))
if response.status_code == 401:
print(“권한 없음 오류”)
“`
3. URL 요청 시 시간 초과
requests 모듈을 이용해서 URL 요청 시간 초과를 처리하는 방법은 다음과 같습니다.
“`python
import requests
try:
response = requests.get(‘https://example.com’, timeout=1)
except requests.exceptions.Timeout:
print(‘요청 시간 초과’)
“`
결론
이번 포스팅에서는 urllib와 requests 라이브러리를 사용한 URL 요청 오류 상황에 대하여 예외처리를 해보았습니다. URL 요청 시 발생하는 다양한 오류들을 처리하는 것은 안전하고 신뢰성 있는 코드 작성에 중요한 부분입니다. 실제 제품 코드에서는 오류상황에 대해 더욱 세심한 예외처리를 수행하는 것이 좋습니다.