使用python连接到域以确定服务器是否联机

2024-09-30 01:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要尝试与域建立连接,以确定特定服务器是否联机

我曾尝试使用套接字创建连接,但即使域处于联机状态,它也从未建立连接

import socket


def ConnectionTest():
    domain = "www.something.com/uptimecheck"

    try:
        socket.create_connection((domain, 443))
        return True
    except OSError:
        pass
    return False

即使我知道域是在线的连接测试总是返回假,而理论上它应该返回真

我做错什么了


Tags: import服务器comreturndomain状态defwww
3条回答

您使用的地址必须解析为IP地址才能与socket一起使用,因此您只需要使用域地址和端口(不需要路径/uptimecheck):

import socket


def test_alive(domain: str, port: int):
    try:
        with socket.create_connection((domain, port)) as s:
            return True
    except OSError:
        pass
    return False


if __name__ == '__main__':
    domain = "example.com"
    print(test_alive(domain, port=443))

只需测试URL是否存在,服务器是否正在发送响应,它可以是任何代码,甚至500

try:
    url = 'https://www.youtube.com'
    p_response = requests.get(url, verify=False)

    print(True)
except:
    print(False)

您正在443上连接服务器,这意味着您正在检查应用层协议为HTTPS的TCP套接字,即远端套接字元组为(<server_ip>, 443)

因此,您可以不用使用典型的web客户机,例如requests就是其中之一(如果尚未安装,请使用pip install requests安装):

import requests

def is_online(url):
    response = requests.get(url)
    return response.status_code == 200

现在,你可以做:

url = "https://www.something.com/uptimecheck"
url_is_online = is_online(url)

注意,我已经在URL路径前面添加了协议(https

相关问题 更多 >

    热门问题