2

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

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

我遇到的两个问题是:

  1. 我不明白为什么对于上述网站,我得到一个 404 响应,尽管如果我在浏览器中签入该网站正在运行。

  2. 在某些时候(当我检查另一个网站时),我收到“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()

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

4

1 回答 1

0

@罗伯特,

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

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

于 2021-11-04T11:26:39.977 回答