Python 请求基本命令返回错误 - 出了啥问题?
Posted
技术标签:
【中文标题】Python 请求基本命令返回错误 - 出了啥问题?【英文标题】:Python requests basic command returns errors - what's wrong?Python 请求基本命令返回错误 - 出了什么问题? 【发布时间】:2021-02-12 19:47:06 【问题描述】:我想运行这 3 个命令:
import requests
result = requests.get("https://somedomain.xyz/start_page.html")
print(result.status_code)
但我得到一个错误输出:
回溯(最近一次通话最后): 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\connectionpool.py”,第 670 行,在 urlopen httplib_response = self._make_request( _make_request 中的文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\connectionpool.py”,第 381 行 self._validate_conn(conn) _validate_conn 中的文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\connectionpool.py”,第 978 行 连接.connect() 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\connection.py”,第 362 行,在连接中 self.sock = ssl_wrap_socket( 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\util\ssl_.py”,第 386 行,在 ssl_wrap_socket return context.wrap_socket(sock, server_hostname=server_hostname) wrap_socket 中的文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\ssl.py”,第 500 行 返回 self.sslsocket_class._create( 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\ssl.py”,第 1040 行,在 _create self.do_handshake() 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\ssl.py”,第 1309 行,在 do_handshake 中 self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1108) 在处理上述异常的过程中,又出现了一个异常: 回溯(最近一次通话最后): 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\adapters.py”,第 439 行,发送 resp = conn.urlopen( 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\connectionpool.py”,第 726 行,在 urlopen 重试=重试。增量( 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\urllib3\util\retry.py”,第 446 行,增量 raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='somedomain.xyz', port=443): 最大重试次数超出 url: /bzo/en/start_page.html (由 SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]证书验证失败:证书链中的自签名证书 (_ssl.c:1108)'))) 在处理上述异常的过程中,又出现了一个异常: 回溯(最近一次通话最后): 文件“C:\Python\TTNr.py”,第 8 行,在 结果 = requests.get("https://somedomain.xyz/start_page.html") 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\api.py”,第 76 行,在 get 返回请求('get', url, params=params, **kwargs) 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\api.py”,第 61 行,在请求中 返回 session.request(method=method, url=url, **kwargs) 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\sessions.py”,第 530 行,在请求中 resp = self.send(prep, **send_kwargs) 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\sessions.py”,第 643 行,在发送中 r = adapter.send(request, **kwargs) 文件“C:\Users\usik\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\adapters.py”,第 514 行,发送 引发 SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='somedomain.xyz', port=443): 最大重试次数超出了 url: /start_page.html (由 SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1108)')))有谁知道可能是什么问题以及如何解决?提前致谢。
【问题讨论】:
//somedomain.xyz 不存在,您可能希望在获取请求方法中放入现有的 url。 从错误文本中很清楚。Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain
- 您可能正在使用自签名证书进行测试。默认情况下不受信任。如果您信任该域,您可以将verify=False
传递给绕过它的请求
【参考方案1】:
import requests
result = requests.get("https://somedomain.xyz/start_page.html", verify=False)
print(result.status_code)
如果你不想保留verify=False
,那么这里需要提到相关证书的路径。
【讨论】:
【参考方案2】:您似乎正在访问使用自签名证书的站点。默认情况下,这将被视为无效。
看看:How to get Python requests to trust a self signed SSL certificate?
【讨论】:
以上是关于Python 请求基本命令返回错误 - 出了啥问题?的主要内容,如果未能解决你的问题,请参考以下文章