【问题标题】:urllib.request SSL Connection Python 3urllib.request SSL 连接 Python 3
【发布时间】:2017-11-27 17:34:05
【问题描述】:

我正在尝试解析来自该 url 的数据:

https://www.chemeo.com/search?q=show%3Ahfus+tf%3A275%3B283

但我认为这是失败的,因为该网站使用 SSL TLS 1.3。如何在 urllib.request 中启用我的 Python 脚本以使用 SSL 进行连接?

我尝试过使用 SSL 上下文,但这似乎不起作用。

这是我拥有的 Python 3.6 代码:

import urllib.request
import ssl
from bs4 import BeautifulSoup

scontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
chemeo_search_url = "https://www.chemeo.com/search?q=show%3Ahfus+tf%3A275%3B283"

print(chemeo_search_url)

with urllib.request.urlopen(chemeo_search_url, context=scontext) as f:
    print(f.read(200))

【问题讨论】:

    标签: python python-3.x ssl web-scraping urllib2


    【解决方案1】:

    试试:

    ssl.PROTOCOL_TLS

    From the docs on "PROTOCOL_SSLv23":

    自 2.7.13 版起已弃用:改用 PROTOCOL_TLS。

    注意:

    确保安装了 CA 证书包,例如在 alpine linux 的最小版本busybox 上,必须安装证书。有时,如果 python 没有在 SSL 支持下编译,可能有必要这样做。此外,根据已编译的 OpenSSL 版本,将确定哪些 SSL 功能可用。

    还请注意 chemeo 网站不使用 TLSv1.3 ...在撰写本文时,它仍处于试验阶段,并非完全安全,他们目前支持使用“letsencrypt”作为其证书提供者的 tls 1.0、1.1、1.2 .

    【讨论】:

    • 感谢您对此进行调查。 ssl.PROTOCOL_TLS 给我一个找不到参考错误,出现在 PyCharm 中的唯一选项是 ssl.PROTOCOL_SSLv23。顺便说一句,我尝试使用requests 包,将验证选项设置为False,这也失败了!你说了一些关于用 SSL 支持编译 python 的事情;我该怎么做呢?
    • @LarsaSolidor 什么操作系统,什么版本的openssl,什么版本的python,你不小心删除了ca证书吗? sudo apt-get install --reinstall ca-certificates ?
    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2011-03-11
    • 2016-08-19
    • 1970-01-01
    • 2018-06-08
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多