使用python一直报错urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:1125)

使用python一直报错,这个是报错信息,urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:1125)
urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:1125)

The above exception was the direct cause of the following exception:

urllib3.exceptions.ProxyError: ('Unable to connect to proxy', SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)')))

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\pythn\lib\site-packages\requests\adapters.py", line 486, in send
    resp = conn.urlopen(
  File "D:\pythn\lib\site-packages\urllib3\connectionpool.py", line 844, in urlopen
    retries = retries.increment(
  File "D:\pythn\lib\site-packages\urllib3\util\retry.py", line 515, in increment
    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='twitter.com', port=443): Max retries exceeded with url: /DAOSBT (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)'))))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/pythn/3.py", line 3, in <module>
    requests.get("https://twitter.com/DAOSBT")
  File "D:\pythn\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "D:\pythn\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "D:\pythn\lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "D:\pythn\lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "D:\pythn\lib\site-packages\requests\adapters.py", line 513, in send
    raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='twitter.com', port=443): Max retries exceeded with url: /DAOSBT (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)'))))
>>> 

我自己跑的代码是这样的


```python
import tweepy

# Authenticate to Twitter
auth = tweepy.OAuthHandler("consumer_key", "consumer_secret")
auth.set_access_token("access_token", "access_token_secret")

# Create API object
api = tweepy.API(auth)

# Get the most recent tweet from @wukongdao
tweets = api.user_timeline(screen_name="wukongdao", count=1)

# Reply to the tweet with "hi"
for tweet in tweets:
    api.update_status(
        status="hi",
        in_reply_to_status_id=tweet.id,
        auto_populate_reply_metadata=True

还有这个


```python

import requests

requests.get("https://twitter.com/DAOSBT")
print(response.text)

都是一样报错,很无奈

SSL/TLS协议的版本不兼容?

该错误消息表明在使用Python进行网络请求时出现了SSL连接错误。该错误可能由以下原因之一引起:

  1. SSL/TLS协议版本不匹配:您的代码可能在尝试与服务器建立SSL连接时使用了不受支持的协议版本。您可以尝试指定较新的SSL/TLS协议版本来解决此问题。例如,您可以使用requests库的verify参数来设置SSL验证选项,如下所示:
import requests

requests.get("https://twitter.com/DAOSBT", verify=True, ssl_version="TLSv1.2")
  1. 代理配置问题:如果您的网络环境使用了代理服务器,可能是代理服务器配置不正确或存在问题导致SSL连接失败。您可以检查代理服务器的配置,并确保您的代码正确设置了代理参数。
import requests

proxies = {
    'http': 'http://your_proxy_server',
    'https': 'https://your_proxy_server',
}

requests.get("https://twitter.com/DAOSBT", proxies=proxies)
  1. 证书问题:SSL连接错误也可能与服务器证书相关。您可以尝试忽略证书验证(仅限于测试环境中),如下所示:
import requests

requests.get("https://twitter.com/DAOSBT", verify=False)

请注意,忽略证书验证可能存在安全风险,不建议在生产环境中使用。

如果上述解决方法仍然无法解决问题,您可能需要进一步调查网络环境和SSL配置。如果使用的是特定的网络库或框架,还可以查阅其文档或社区支持资源,以获取更具体的解决方案和建议。

img


参考 https://qiita.com/sta/items/6d08151fd9b20fa8b319

我也有时候会遇到这个错误,我会忽略掉,然后就可以了。但是你得看你自己的具体情况,然后选择具体怎么处理。
根据gpt的回答,整理了一些信息,供你参考:
urllib3.exceptions.SSLError: EOF occurred in violation of protocol 错误通常表示在建立与服务器的安全连接时出现了问题。大多数情况下,这是因为 SSL 协议版本不兼容或服务器证书验证失败导致的。

你可以尝试以下解决方案来解决这个问题:

  1. 确认 Python 版本:确保你正在使用的 Python 版本是最新的,并且是与你所连接的服务器使用的 SSL 协议版本兼容的。

  2. 更新相关库:更新 urllib3requests 和其他相关库到最新版本,以确保使用了最新的安全协议和修复了已知的问题。

    使用以下命令升级库:

    pip install --upgrade urllib3 requests
    
  3. 忽略 SSL 验证:如果你在开发环境中并且信任要连接的服务器,可以暂时忽略 SSL 验证错误。

    在请求发送前,添加以下代码:

    import urllib3
    
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    

    请注意,这可能存在安全风险,因为它会绕过服务器证书的验证。

  4. 指定更具体的 SSL 协议版本:有时,服务器可能不支持默认的 SSL 协议版本。你可以尝试指定一个具体的 SSL 协议版本来建立连接。

    例如,如果服务器只支持 TLS 1.2,可以使用以下代码来指定 SSL 协议版本:

    import requests
    
    requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += 'HIGH:!DH:!aNULL'
    requests.packages.urllib3.util.ssl_.DEFAULT_SSL_VERSION = 'TLSv1.2'
    

    请根据实际情况替换为服务器支持的 SSL 协议版本。

你提供的这段代码都报错说明问题很明显的,把对应urllib3或者request的版本换一下,或者升级一下,不行就降级一下,总有一个版本能完美运行的

img

以下答案参考newbing,回答由博主波罗歌编写:
该错误通常表示与SSL相关的问题。它可能是由于以下原因之一引起的:

  1. 证书问题:服务器端证书可能无效、过期或不受信任。您可以尝试通过将verify参数设置为False来忽略证书验证,但这不是推荐的安全做法。

  2. 代理问题:您的请求可能正在通过代理服务器发送,而代理服务器可能存在问题。您可以尝试将代理设置为空,以直接与目标服务器建立连接。

  3. SSL版本不匹配:您的Python版本可能与目标服务器所使用的SSL版本不匹配。您可以尝试升级您的Python版本或检查您是否需要更新SSL库。

现在来看一下您的代码中可能存在的问题:

代码一中,您的requests.get请求未捕获可能发生的异常,导致报错。您可以将其放在try...except块中,并在发生异常时打印出具体错误信息,以便更好地理解问题所在。

代码二中,您的tweepy.OAuthHandler处填充的密钥信息似乎有误。您需要将自己的Twitter开发者密钥替换为正确的值。

另外,您在这两段代码中没有导入tweepyrequests模块,您需要添加相关的导入语句。

下面是更正后的代码示例:

代码一:

import requests

try:
    response = requests.get("https://twitter.com/DAOSBT", verify=False)
    print(response.text)
except Exception as e:
    print("An error occurred:", str(e))

代码二:

import tweepy

consumer_key = "your_consumer_key"
consumer_secret = "your_consumer_secret"
access_token = "your_access_token"
access_token_secret = "your_access_token_secret"

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

try:
    tweets = api.user_timeline(screen_name="wukongdao", count=1)
    for tweet in tweets:
        api.update_status(
            status="hi",
            in_reply_to_status_id=tweet.id,
            auto_populate_reply_metadata=True
        )
except tweepy.TweepError as e:
    print("An error occurred:", str(e))

请确保将代码中的密钥信息替换为正确的值,并确保网络连接正常。如果问题仍然存在,请提供更多详细信息,例如完整的错误堆栈跟踪和您正在使用的Python版本,以便我们可以更好地帮助您解决问题。
如果我的回答解决了您的问题,请采纳!

这个错误表明发生了SSL协议违反EOF错误。这可能是由于与服务器的SSL握手时发生了错误,导致连接被终止。

应该是urllib3的版本问题,安装下面这个版本

pip install urllib3==1.25.11

这个错误通常是由于与代理服务器建立连接时发生的SSL错误引起的。错误提示中显示了在与代理服务器建立连接时发生了"SSLEOFError"错误。这可能是由于代理服务器的配置问题或与代理服务器之间的网络连接问题引起的。

以下是一些可能的解决方法:

  1. 检查代理设置:如果您正在使用代理服务器进行网络请求,请确保代理设置正确,并且代理服务器能够正常连接。您可以尝试更换或配置正确的代理服务器设置。

  2. 检查网络连接:确保您的计算机能够正常连接到互联网,并且网络连接稳定。检查您的网络连接设置,确保没有任何阻止或限制网络连接的问题。

  3. 更新Python库:确保您使用的Python库(例如urllib3和requests)是最新版本。可以尝试升级这些库以获取最新的修复和改进。

  4. 检查SSL证书:有时候,SSL证书可能会导致问题。您可以尝试更新您的操作系统的SSL证书或重新安装证书。

  5. 联系网络管理员:如果您无法解决此问题,可能是由于网络环境的特殊配置或限制引起的。请联系您的网络管理员或技术支持人员,寻求进一步的帮助和解决方案。

请注意,这些解决方法是一般性的建议,并不保证完全解决问题。根据您的具体情况和环境,可能需要进一步的调试和研究才能找到准确的解决方案。

Python之解决urlopen error EOF occurred in violation of protocol问题
解决方法
得挂载http时指定一个adapter,让sslVersion为TLSV1。新增代码如下

from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager
import ssl
 
 
class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(num_pools=connections,
                                       maxsize=maxsize,
                                       block=block,
                                       ssl_version=ssl.PROTOCOL_TLSv1)
 
 
if __name__ == '__main__':
    s = requests.Session()
    s.mount('https://', MyAdapter())
    
    ..  # 老逻辑