【问题标题】:Use urllib or requests to get data from URL使用 urllib 或 requests 从 URL 获取数据
【发布时间】:2016-07-06 17:17:35
【问题描述】:

我正在尝试使用 urllib、urllib2 或 requests 从站点获取特定数据。我使用 Python2.7。 我不断收到错误:

requests.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)

这是我的请求代码:

  import requests
  r = requests.get("https://metoc.ndbc.noaa.gov/jtwc#_48_INSTANCE_0SiamlX2KcM6_=https%3A%2F%2Fmetoc.ndbc.noaa.gov%2FProductFeeds-portlet%2Fimg%2Fjtwc%2Fhtml%2Fcoop.jsp%3F")

我已经尝试了所有方法,但没有任何效果:

我尝试将验证参数设置为 false。我犯了同样的错误。 我尝试使用适配器(如其他答案中所述)以使用另一个 SSL 版本。我仍然遇到同样的错误。

任何想法可能是什么问题? 会不会是宿主锁定了访问权限,无法获取这个URL的来源?

【问题讨论】:

  • 为我工作。我主要得到一堆javascript。
  • @user1919 显式设置 tls 时出现相同的 sslv3 错误?即使使用 ECDHE 加密,服务器也不接受任何 sslv3
  • 也许是一个愚蠢的问题,但您确实使用 s 来提出请求?即会话对象?
  • 最后一件事openssl version bash 输出了什么?
  • 它给出了这个:OpenSSL 0.9.8zh 14 Jan 2016

标签: python python-requests urllib


【解决方案1】:

所有这些都在带有 Yosemite 或 ElCapitan 的 Mac 中......

这些版本仍然带有 OpenSSL 0.9.8,所以我猜你的 python 链接到这个版本的 OpenSSL(python 不使用 OS X 中的本机 TLS 堆栈)。但由于服务器仅支持 ECDHE 密码,而 OpenSSL 0.9.8 不支持这些密码,因此握手将失败。有关详细信息,请参阅report from SSLLabs

【讨论】:

  • 谢谢!那么我在这里的选择是什么?
  • @user1919 升级你的openssl ftp.openssl.org/source
  • @Padraic Cunningham 我已经使用 brew 更新了我的 openssl。这并没有解决问题!
  • 您是否尝试按照我添加到 cmets 的链接使用 tls 设置适配器?
  • @user1919:只更新openssl是不够的,还得和python链接。要检查您的 python 使用的 openssl 版本,请检查 ssl.OPENSSL_VERSION。请参阅stackoverflow.com/questions/18752409/…,了解有关如何更新您的 python 以包含更新版本的 openssl 的更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 2021-01-31
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2021-07-28
相关资源
最近更新 更多