[Update] 여러 url을 연속으로 돌릴 수 있음

This commit is contained in:
tv0924@icloud.com 2025-06-02 20:24:00 +09:00
commit 802b8311a7
3 changed files with 15 additions and 22 deletions

View file

@ -9,28 +9,17 @@ def is_html_url(url: str, timeout: float = 10.0) -> bool:
반환값:
- Content-Type이 'text/html' 시작하면 True, 그렇지 않으면 False
"""
try:
# HEAD 요청으로 헤더만 가져와도 충분하지만, 일부 서버에서 HEAD를 허용하지 않을 수 있어
# GET 요청을 사용해도 무방합니다. 단, GET은 바디를 가져오기 때문에 HEAD보다 비용이 높을 수 있음.
response = requests.head(url, timeout=timeout, allow_redirects=True)
with requests.get(url, timeout=timeout, stream=True) as response:
# 응답 코드가 200번대가 아니면 False로 간주
if not response.ok:
return False
# 만약 HEAD 요청에 실패하거나 서버가 405(Method Not Allowed)를 반환하면, GET 요청으로 재시도
if response.status_code == 405:
response = requests.get(url, timeout=timeout, stream=True)
# 응답 코드가 200번대가 아니면 False로 간주
if not response.ok:
return False
content_type = response.headers.get('Content-Type', '')
# Content-Type에 'text/html'이 포함되어 있으면 HTML로 간주
return content_type.lower().startswith('text/html')
except requests.RequestException as e:
# 네트워크 오류, 타임아웃 등 예외 발생 시 False 반환
# 필요하다면 로그를 찍거나 예외를 다시 던질 수 있습니다.
print(f"Error fetching URL: {e}")
content_type = response.headers.get('Content-Type', '')
# Content-Type에 'text/html'이 포함되어 있으면 HTML로 간주
return content_type.lower().startswith('text/html')
except requests.RequestException:
return False
if __name__ == '__main__':