Replit运行requests代码遇requests.exceptions.SSLError问题求助
解决Replit中Python requests访问MOEX接口的SSL报错问题
问题概述
- 一周前可正常运行的Python requests代码,现在在Replit上执行出现SSL错误
- 目标URL在浏览器中能正常访问,已尝试网络常规方案(含Stack Overflow相关解法)但无效
原代码
import requests url = ‘https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics.csv’ print(url) r = requests.get(url).text print (r)
报错信息(翻译后)
Traceback (most recent call last):… requests.exceptions.SSLError: HTTPSConnectionPool(host='iss.moex.com', port=443): Max retries exceeded with url: /iss/statistics/engines/stock/markets/index/analytics.csv (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)')))
解决方案
1. 修正代码中的中文引号
原代码使用了中文全角引号,会导致URL解析异常,替换为英文半角引号即可:
import requests url = 'https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics.csv' print(url) r = requests.get(url).text print(r)
2. 强制指定兼容的TLS版本
部分服务器会调整TLS支持策略,Replit环境默认TLS版本可能不匹配。通过自定义适配器强制使用TLSv1.2:
import requests import ssl from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager from urllib3.util import ssl_ class TLSAdapter(HTTPAdapter): def init_poolmanager(self, connections, maxsize, block=False): # 创建指定TLS版本的SSL上下文 ctx = ssl_.create_urllib3_context( ssl_version=ssl.PROTOCOL_TLSv1_2, cert_reqs=ssl.CERT_REQUIRED, options=ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 ) self.poolmanager = PoolManager( num_pools=connections, maxsize=maxsize, block=block, ssl_context=ctx ) url = 'https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics.csv' session = requests.Session() # 给HTTPS请求挂载自定义适配器 session.mount('https://', TLSAdapter()) try: response = session.get(url).text print(response) except Exception as e: print(f"错误详情: {str(e)}")
3. 临时跳过SSL验证(仅用于测试)
若上述方法无效,可临时关闭SSL验证排查问题(生产环境禁止使用,存在安全风险):
import requests import urllib3 # 关闭不安全请求警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = 'https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics.csv' print(url) response = requests.get(url, verify=False).text print(response)
内容的提问来源于stack exchange,提问作者V V
相关产品推荐
相关产品推荐

