티스토리 뷰
Python에서 웹 크롤링을 진행할 때, Senelium을 이용하여 사이트를 접속하고 Requests를 이용하여 원하는 데이터를 가져옵니다.
Requests는 HTTP 메소드를 이용하여 접속을 하는데, 주로 GET과 POST를 사용합니다.
GET은 requests.get()을 사용하고 POST는 requests.post()를 사용합니다.
1. requests 모듈 설치
pip(패키지 관리자)를 이용하여 모듈을 설치합니다.
pip install requests
pip install requests
2. 초간단 테스트
ㄱ. 정상적인 https 사이트 접속 코드 및 결과
import requests
response = requests.get("https://www.naver.com")
data = response.text
print(data)
테스트로 네이버(https://www.naver.com) 사이트를 접속하여 봅니다.
<!doctype html> <html lang="ko">
<head> <meta charset="utf-8">
<title>NAVER</title> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=1190">
<meta name="apple-mobile-web-app-title" content="NAVER"/>
<meta name="robots" content="index,nofollow"/>
<meta name="description" content="네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요"/>
https(암호화된 사이트)에서 정상적으로 html 문서가 그대로 출력됨을 확인할 수 있습니다.
ㄴ. 신뢰하지 않은 SSL 인증서가 설치되어 있는 https 사이트 접속 및 결과
그래서 제가 테스트하는 https 서버에 requests 모듈을 이용하여 접속 테스트를 시도해보았습니다.
테스트 서버다 보니 https의 인증서가 정상적으로 설치하지 않았습니다.
참고로, 인증서가 없는 사이트는 접속 시 웹 브라우저에서 다음과 같은 에러 메시지가 발생합니다
테스트 서버다 보니 다음과 같이 클릭하면 됩니다.
- 고급 클릭
- 안전하지 않음으로 이동 클릭
시 정상적으로 사이트에 접속합니다.
다시 돌아와서 테스트 서버의 URL을 Get으로 요청합니다.
import requests
url= "https://192.168.105.2"
response = requests.get(url)
data = response.text
print(data)
이번에는 에러 메시지가 다음과 같이 발생합니다.
requests.exceptions.SSLError: HTTPSConnectionPool(host='192.168.105.2', port=443):
Max retries exceeded with url: /
(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: self signed certificate (_ssl.c:1051)')))
에러 메시지 : SSL: CERTIFICATE_VERIFY_FAILED , Certificate verify failed
인증서와 관련하여 유효하지 않기에 에러 메시지를 뱉고(?) Trackback과 함께 프로그램이 종료됩니다.
해결 방법
requests 모듈에서 url 뒤에 옵션을 하나 주면 해결할 수 있습니다.
response = requests.get(url,verify=False)
verify=False
해당 옵션을 사용하면 HTTPS 요청에 대한 SSL 인증서 확인 과정을 생략하겠다는 의미입니다.
InsecureRequestWarning:
Unverified HTTPS request is being made.
Adding certificate verification is strongly advised.
See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
<Response [200]>
SSL-Warning 문구는 보이지만 응답 코드는 200이 떨어져서 정상적으로 사이트에 접속 됨을 확인 할 수 있었습니다.
http 응답코드 (200)
서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다.
'개발 > python' 카테고리의 다른 글
[파이썬] Socket library를 활용하여, 네트워크 통신 테스트 소스코드 예제 (2) | 2024.05.01 |
---|---|
IT비전문가인 제가 학습한 파이썬 테크트리 에 대해 알아보자 (IT비개발자 집중!!) (1) | 2024.04.15 |
[python][라이브러리] Faker 모듈에 대해 알아보자(feat. 자네 가라 데이터가 필요한가?) (3) | 2020.12.11 |
- Total
- Today
- Yesterday
- 방화벽엔지니어
- 보안엔지니어
- 태광네트웍정보
- 파이썬
- 정보보안초보
- 다단계 인증
- 복잡한비밀번호정책
- fido2인증
- 리듬찾기
- 아무도믿지마라
- 계정보안강화
- 막창
- tcpdump
- 종합쇼핑몰물품내역
- sshroot로그인차단
- 조달데이터허브
- 안랩XTG
- 강력한비밀번호관리
- 시스원
- 스윙박자
- 골프리듬감
- 침입방지시스템
- 골프드라이브
- 조달네트워크
- python
- snort3
- 사업계획시즌
- 아이티윈
- IPS
- 드라이브스윙
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |