ssl - 在 Python3.6 中使用 http.client 返回 [SSL : UNKNOWN_PROTOCOL]

标签 ssl python-3.6 http.client

该脚本有一个非常简单的目的,即检查一系列网站是否启动并运行。我尝试使用 urllib,但出现证书错误。

使用 http.client 和通过代理进行隧道似乎会返回一个奇怪的输出,直到网站由于 [SSL: UNKNOWN_PROTOCOL] 错误而崩溃。

我遇到的两个问题是:

  • 我不明白为什么对于上述网站,我得到一个 404 响应,尽管如果我在浏览器中 checkin 该网站正在运行。
  • 在某些时候(当我检查另一个网站时),我收到“ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:777)”

  • 编码:
    import http.client, csv
    
    my_file = open('active_site.csv')
    my_reader = csv.reader(my_file)
    my_data = list(my_reader)
    my_len = len(my_data)
    
    g = 1
    while g < 10:
        print("Checking {}....\n".format(my_data[g][3]))
        conn = http.client.HTTPSConnection("My_Proxy", my_port)
        conn.set_tunnel(my_data[g][3])
        conn.request("HEAD", "/index.html")
        res = conn.getresponse()
        if res.status == 200:
            print("{} is online!".format(my_data[g][3]))
            g += 1
            conn.close()
        else:
            print("{} seems to be offline".format(my_data[g][3]))
            g += 1
            conn.close()
    

    我很感激任何关于我在哪里搞砸和/或不完整代码的建议。

    最佳答案

    @罗伯特,
    对于 1,此行为的主要原因是服务器需要 session 信息。该信息可以是授权 token 或 cookie。使用隐身模式下的浏览器检查对同一 URL 的访问(如果它仍然有效)。如果请求返回 404,则原因是 cookie 和 headers。在正常模式下检查浏览器中的 cookie 和 header ,并尝试在您的 HTTPSConnection 中使用它们。
    对于 2。我猜这是因为您的服务器使用 TTLs v3.0 进行 HTTPS。尝试使用为此版本启用的 python 3.8。查询:https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection

    关于ssl - 在 Python3.6 中使用 http.client 返回 [SSL : UNKNOWN_PROTOCOL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47338073/

    相关文章:

    android - 我的 android 应用程序需要在我的网络服务器上使用 ssl 吗

    使用 tkinter 的 Python 程序在 Windows 10 中立即关闭

    go - request.context 不会关闭连接

    python3 http.client 我不能用于非 www 站点

    ssl - SSL 可以在同一托管计划的两个域之间共享吗

    python - 如何确保轮换 TLS session 票证?

    java - 用于相互认证的 keystore /信任库中必须包含什么?

    python - Django 过滤器选择字段显示正确的值但不会过滤

    python - 使用 Python3.6 安装 NLTK 时出错

    python - 使用 python 和 http.client 在发布请求中包含证书的示例