작성
·
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이 인증서를 확인할 수 있도록 설정하는 방법을 찾아보는 것이 좋습니다.
원하는 답변을 찾지 못하셨나요? 그럼 우측 하단의 ‘문의하기’에서 직접 문의해주세요. 최대한 빠르게 답변드리도록 하겠습니다!