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



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

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

我遇到的两个问题是:

  1. 我不明白为什么对于所述网站,我会收到 404 响应,尽管如果我在浏览器中检查该网站正在工作。

  2. 在某些时候(当我查看另一个网站时(,我得到"ssl.SSLError: [SSL: 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()

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

@Robert ,

对于 1,此行为的主要原因是服务器需要会话信息。该信息可以是授权令牌或 Cookie。使用隐身模式下的浏览器检查对同一网址的访问权限(如果它仍然有效(。如果请求返回 404,则 cookie 和标头是原因。在正常模式下检查浏览器中的 Cookie 和标头,并尝试在 HTTPSConnection 中使用它们。

对于 2.我想这是因为您的服务器正在使用 TTL v3.0 进行 HTTPS。尝试使用此版本启用的python 3.8。检查:https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection

最新更新