39. WebFetch가 HTTPS로 강제 변환할 때 curl로 우회하기¶
한 줄 요약¶
WebFetch는 HTTP URL을 자동으로 HTTPS로 바꾸는데, HTTPS를 안 쓰는(또는 못 쓰는) 사이트는 TLS 인증서 에러로 실패한다. 이때 curl -sk 한 줄로 우회 가능.
비유로 이해하기¶
WebFetch는 "보안 우체국"이야. 편지 봉투를 자동으로 등기 봉투(HTTPS)로 바꿔서 보내. 근데 받는 곳이 일반 우체통(HTTP)밖에 없으면? 등기 봉투를 안 받아주니까 반송됨. 그럴 땐 직접 일반 봉투로 부치면 되는데, 그게 curl이야.
언제 만나는 문제냐¶
- 한국 중소 호텔·식당 공식 사이트 (많은 곳이 HTTPS 미적용)
- 시청·면사무소 공공 사이트 (일부)
- 오래된 자체 운영 사이트
- 라마다 스위츠 거제 공식 사이트(ramadasuitegeoje.com)도 이 케이스 — 2026-05-16 세션에서 실제 발생
에러 메시지¶
WebFetch는 자동으로 https://로 바꿔서 시도 → 사이트가 HTTPS 인증서가 없거나 도메인이 안 맞음 → TLS 에러.
해결법: curl 한 줄¶
옵션 풀이:
- -s (silent): 진행률 표시 끄기
- -k (insecure): SSL 인증서 검증 무시 (HTTP만 쓰는 사이트 대응)
- -L: 리다이렉트 따라가기
- --max-time 30: 30초 안에 못 받으면 포기
- > output.html: HTML 파일로 저장
한글 페이지 파싱까지 한 번에¶
curl -sk "http://www.ramadasuitegeoje.com/view/viewLink.do?page=homepage/KOR/company/intro" -L --max-time 30 > intro.html && python -X utf8 -c "
import re
with open('intro.html', 'rb') as f:
raw = f.read()
html = raw.decode('utf-8')
# script/style 태그 제거
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL)
# 태그 → 줄바꿈
text = re.sub(r'<[^>]+>', '\n', text)
lines = [l.strip() for l in text.split('\n') if l.strip()]
# 키워드 들어간 줄만 추출
for line in lines:
if any(kw in line for kw in ['주소', '전화', 'Tel.', '경남', '서울']):
print(line)
"
호텔 공식 사이트에서 주소·전화·체크인 시간 같은 1차 출처 정보를 정확하게 뽑을 수 있어. 블로그 글이나 OTA보다 신뢰도 훨씬 높음.
왜 WebFetch는 HTTPS로 강제할까¶
웹 표준이 HTTPS로 굳어지면서 WebFetch가 보안상 HTTP를 막아둠. 일반 웹 검색·해외 사이트엔 문제 없지만, 한국 중소 사이트는 아직 HTTP만 지원하는 곳이 꽤 있어서 충돌이 남.
실전 판단 기준¶
- 사이트 URL이
http://로 시작 → WebFetch 실패 가능성 50% - 한 번 시도해 보고
ERR_TLS_CERT에러 뜨면 → 바로 curl 우회 - curl도 안 되면 → 셀레니움(브라우저 자동화)으로 직접 페이지 띄우기
관련 패턴¶
- 한글 경로 파일은
python -X utf8또는PYTHONUTF8=1환경변수 필수 re.sub로 HTML 태그 제거하면 텍스트만 깔끔하게 추출 가능- bash의 grep보다 Python re.sub가 한글 처리에 더 안정적
관련 study 문서¶
- 04-mcp.md - WebFetch 등 도구 구조
- 20-팩트체크-교차검증.md - 공식 사이트 1차 출처 원칙
- selenium-automation.md - 셀레니움으로 페이지 띄우기