如何使用 Python 检查用户的网络连接是否已开启或关闭?


通常,如果您需要验证当前系统是否连接到互联网,我们可以通过简单地向任何 Web 服务器应用程序发送请求(使用浏览器或使用 dos 命令 ping)来做到这一点。

ping 命令通常用于排查连接、可达性和名称解析问题。

类似地,在 Python 中,我们可以通过向任何 Web 应用程序发送请求或使用 ping 命令来验证用户的互联网连接状态。

使用 request.get() 方法

在 Python 中,requests 模块帮助我们使用 Python 发送 HTTP 请求。通过使用该模块的方法向任何网站发送请求,我们可以确定用户的互联网连接是否已开启或关闭。

Python requests 模块的 get() 方法接受 URL 作为参数,并向指定的 URL 发送 GET 请求。

语法

以下是 get() 函数的语法:

requests.get(link, timeout)

其中,

  • link 是网页的链接

  • timeout 是等待 DNS 服务器响应的时间。

如果我们尝试在没有互联网连接的情况下发送请求,此方法会引发异常。

示例

在此示例中,通过将网站链接传递给 get() 函数,我们试图确定当前系统是否连接到互联网。

import requests
def internet_connection():
    try:
        response = requests.get("https://dns.tutorialspoint.com", timeout=5)
        return True
    except requests.ConnectionError:
        return False    
if internet_connection():
    print("The Internet is connected.")
else:
    print("The Internet is not connected.")

输出

The Internet is connected.

使用 socket.connect() 方法

套接字是双向通信通道的端点。套接字可以在进程内、同一台机器上的进程之间或不同大陆上的进程之间进行通信。我们在 Python 中使用 socket 模块来创建和使用套接字。

socket 模块的 connect() 方法用于建立到地址处的远程套接字的连接。如果当前系统未连接到互联网,此方法会引发异常。

示例

让我们看一个使用 socket 模块的 connect() 函数检查用户互联网连接性的示例。

import socket
def check_internet_connection():
    remote_server = "www.google.com"
    port = 80
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(5)
    try:
        sock.connect((remote_server, port))
        return True
    except socket.error:
        return False
    finally:
        sock.close()
if check_internet_connection():
    print("Internet is connected.")
else:
    print("Internet is not connected.")

输出

Internet is not connected.

使用 urllib.request.urlopen() 方法

与上述两个库类似,Python 还有一个名为 urllib.request 的可扩展库。使用此模块的功能和类,我们可以向所需的 URL 发送请求。

urllib.request.urlopen() 函数接受 URL(作为其参数之一)并打开到指定 URL 的连接。与上述两种方法类似,如果我们在未连接到互联网的情况下执行此方法,此函数会引发异常。

示例

以下是如何使用 urllib.request 模块检查用户互联网连接性的示例。在这里,我们使用 urlopen() 函数打开指定的网站并检查用户的互联网状态。

import urllib.request
def check_internet_connection():
    try:
        urllib.request.urlopen("https://www.Tutorialspint.com")
        return True
    except urllib.error.URLError:
        return False

if check_internet_connection():
    print("Internet is connected.")
else:
    print("Internet is not connected.")

输出

Internet is not connected.

使用 ping 命令

要检查用户的互联网连接是否已开启或关闭,我们还可以使用 ping 命令,它通常用于向远程服务器发送 Internet 控制报文协议 (ICMP) 回显请求,然后检查是否收到响应。

使用 subprocess 模块,我们可以从当前 Python 程序启动一个新的应用程序。我们可以使用 check_output() 方法获取程序或命令的输出。我们可以使用此方法执行 ping 命令,并确定当前系统是否连接到互联网。

示例

这可以通过导入 subprocess 模块来完成。在 subprocess 中,我们有 check_output() 函数,它检查互联网状态。以下是代码。

import subprocess
def check_internet_connection():
   try:
      subprocess.check_output(["ping", "-c", "1", "8.8.8.8"])
      return True
   except subprocess.CalledProcessError:
      return False
if check_internet_connection():
   print("Internet is connected.")
else:
   print("Internet is not connected.")

输出

以下是我们在运行代码时上述代码的输出:

Internet is not connected.

更新于: 2023年8月9日

10K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告