亮子� 2025-11-18 09:32 采纳率: 0%
浏览 14

tlsv1 alert protocol version (_ssl.c:1045)')

win下本地运行代码 使用的是py3.7.0

import requests  
from bs4 import BeautifulSoup  
urls = "http://www.weather.com.cn/weather/101010100.shtml"  
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
# 本地测试链接仍然打不开 
r = requests.get(urls, timeout=30, headers=headers) 
r.raise_for_status()  # 若请求不成功,抛出HTTPError 异常 
r.encoding = 'utf-8' 
soup = BeautifulSoup(r.text, "html.parser") 
print(soup) 

报错requests.exceptions.SSLError: HTTPSConnectionPool(host='http://www.weather.com.cn%27/, port=443): Max retries exceeded with url: /weather/101010100.shtml (Caused by SSLError(SSLError(1, '[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:1045)')))
可有知晓,疑似本地环境有关,无奈实在找不到办法,代码设置过 os.environ['COMPOSE_TLS_VERSION'] = "TLSv1_2" 仍不起效

  • 写回答

4条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-11-18 09:43
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 出现tlsv1 alert protocol version错误通常表示客户端(你的Python代码)和服务器之间协商的TLS版本不兼容。
      - 从提供的代码片段看,URL不完整,这可能不是直接导致该错误的原因,但可能影响后续的请求操作。
    2. 解决方案
      - 检查requests库的配置
      • 可以尝试设置requests库使用的TLS版本。例如,在发送请求前添加如下代码:
    import requests
    from bs4 import BeautifulSoup
    import ssl
    
    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    response = requests.get('http://www.weather.com', verify=True, stream=False, context=context)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    • 检查服务器支持的TLS版本
      • 确保目标服务器(http://www.weather.com)支持你设置的TLS版本。有些服务器可能只支持特定的TLS版本。
    • 确保URL完整
      • 将URL补充完整,如http://www.weather.com.cn或其他正确的天气网站URL。
        3. 不同方案优缺点
    • 设置SSLContext
      • 优点:可以灵活控制请求使用的TLS版本,适用于大多数需要强制指定TLS版本的情况。
      • 缺点:如果服务器不支持指定的TLS版本,仍然会报错,需要进一步排查服务器配置。
    • 检查URL完整性
      • 优点:简单直接,如果URL错误会导致请求失败,补充正确URL后可正常请求。
      • 缺点:与TLS版本不兼容问题无关,只是解决请求的基本前提。
        4. 总结
    • 首先要确保URL正确完整,然后通过设置SSLContext来调整requests库使用的TLS版本,以解决tlsv1 alert protocol version错误。如果问题仍然存在,需要进一步检查服务器端的TLS配置以及网络环境等因素。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月18日