인프런 커뮤니티 질문&답변

여인수님의 프로필 이미지
여인수

작성한 질문수

12시간 안에 끝내는 파이썬을 활용한 크롤링

req.get("http://www.naver.com) 입력후 "Response[200]" 이라고 나오지 않네요 ㅠㅠ

작성

·

83

0

수업을 따라하던중 아래와 같이 발생됩니다. 원인을 알수가 없어서 후속 수업관련 따라하기가 곤란하테요ㅠㅠ

 

import requests as req

req.get("https://www.naver.com")

상기와 같이 입력후

"Response [200]" 이라고 나타나지 않고 아래와 같이 나타납니다.

뭐가 잘못된건지 알수가 없어서 질의합니다.

---------------------------------------------------------------------------
SSLCertVerificationError                  Traceback (most recent call last)
File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\connectionpool.py:468, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)
    467 try:
--> 468     self._validate_conn(conn)
    469 except (SocketTimeout, BaseSSLError) as e:

File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\connectionpool.py:1097, in HTTPSConnectionPool._validate_conn(self, conn)
   1096 if conn.is_closed:
-> 1097     conn.connect()
   1099 if not conn.is_verified:

File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\connection.py:642, in HTTPSConnection.connect(self)
    634     warnings.warn(
    635         (
    636             f"System time is way off (before {RECENT_DATE}). This will probably "




~ 중간 생략 ~

File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\util\retry.py:515, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
    514     reason = error or ResponseError(cause)
--> 515     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
    517 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)

MaxRetryError: HTTPSConnectionPool(host='www.naver.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1006)')))

During handling of the above exception, another exception occurred:

SSLError                                  Traceback (most recent call last)
Cell In[2], line 1
----> 1 req.get("http://www.naver.com")

File C:\ProgramData\anaconda3\Lib\site-packages\requests\api.py:73, in get(url, params, **kwargs)
     62 def get(url, params=None, **kwargs):
     63     r"""Sends a GET request.
     64 
     65     :param url: URL for the new :class:`Request` object.
   (...)
     70     :rtype: requests.Response
     71     """
---> 73     return request("get", url, params=params, **kwargs)

File C:\ProgramData\anaconda3\Lib\site-packages\requests\api.py:59, in request(method, url, **kwargs)
     55 # By using the 'with' statement we are sure the session is closed, thus we
     56 # avoid leaving sockets open which can trigger a ResourceWarning in some
     57 # cases, and look like a memory leak in others.
     58 with sessions.Session() as session:
---> 59     return session.request(method=method, url=url, **kwargs)


~ 중간 생략 ~

File C:\ProgramData\anaconda3\Lib\site-packages\requests\adapters.py:517, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    513         raise ProxyError(e, request=request)
    515     if isinstance(e.reason, _SSLError):
    516         # This branch is for urllib3 v1.22 and later.
--> 517         raise SSLError(e, request=request)
    519     raise ConnectionError(e, request=request)
    521 except ClosedPoolError as e:

SSLError: HTTPSConnectionPool(host='www.naver.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1006)')))

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님께서 겪고 계신 오류는 SSL 인증서 검증 실패로 인한 것입니다. 이는 Python에서 https 요청을 보낼 때 SSL 인증서를 제대로 검증하지 못해서 발생하는 문제입니다. 일반적으로 macOS에서 Python을 설치한 경우에 처음에 SSL 인증서 경로를 제대로 찾지 못하는 경우가 많습니다. Windows에서도 유사한 문제가 발생할 수 있습니다.

해결 방법 중 하나로 requests 모듈을 사용할 때 SSL 인증서 검증을 하지 않도록 설정할 수 있습니다. 하지만 보안 상 좋지 않은 방법이기 때문에, 개발 환경에서만 임시로 사용해야 합니다. 아래는 SSL 인증서 검증을 하지 않는 방법입니다:

import requests

response = requests.get('https://www.naver.com', verify=False)
print(response.status_code)

verify=False 옵션을 추가하여 SSL 인증서 검증 과정을 생략할 수 있습니다. 다시 말씀드리지만, 이 방법은 보안에 취약하므로 실제 production 환경에서는 사용하지 않는 것이 좋습니다.

SSL 인증서 문제를 안전하게 해결하려면 해당 OS의 인증서 저장소에 올바른 인증서를 설치하거나 Python이 인증서를 확인할 수 있도록 설정하는 방법을 찾아보는 것이 좋습니다.

원하는 답변을 찾지 못하셨나요? 그럼 우측 하단의 ‘문의하기’에서 직접 문의해주세요. 최대한 빠르게 답변드리도록 하겠습니다!

여인수님의 프로필 이미지
여인수

작성한 질문수

질문하기