📜  使用Python构建 CLI 以检查 URL 的状态

📅  最后修改于: 2022-05-13 01:55:21.773000             🧑  作者: Mango

使用Python构建 CLI 以检查 URL 的状态

在本文中,我们将构建一个 CLI(命令行界面)程序来使用Python验证 URL 的状态。 Python CLI 将一个或多个 URL 作为参数并检查该 URL 是否可访问(或不可访问)。

分步实施

步骤 1:设置文件和安装要求

首先,创建一个名为“urlcheck”的目录,并在“urlcheck.py”目录下新建一个文件(目录和Python文件可以使用任何名称)。

mkdir urlcheck && cd urlcheck
touch urlcheck.py

安装Python请求和验证器库:

pip3 install requests validators

现在创建一个基础Python文件,导入所有必需的库

Python3
import sys
import requests
from http.client import responses
import validators
  
if len(sys.argv) < 2:
    print('You need to specify atleast one URL')
    sys.exit()
  
def main():
    # main function
      
if __name__ == "__main__":
    main()


Python3
def usage():
    print("\nUsage:\nSingle URL: urlcheck \
    nMultiple URL's: urlcheck   ... \n")
  
if sys.argv[1]=="help":
    usage()
    sys.exit()


Python3
def main():
    n = len(sys.argv)
      
    for i in range(1, n):
        url = sys.argv[i]
          
        if validators.url(url) is True:
            status = requests.head(url).status_code
            try:
                print(url, status, responses[status], "\n")
            except:
                print(url, status, "Not an Standard HTTP Response code\n")
          
        else:
            print(url, "Not an valid URL\n")
            continue


Python3
import sys
import requests
from http.client import responses
import validators
  
if len(sys.argv) < 2:
    print('You need to specify at least url')
    sys.exit()
  
def usage():
    print("\nUsage:\nSingle URL: urlcheck \nMultiple\
    URL's: urlcheck   ... \n")
  
if sys.argv[1]=="help":
    usage()
    sys.exit()
  
def main():
    n = len(sys.argv)
    print("\n")
    for i in range(1, n):
        url = sys.argv[i]
        if validators.url(url) is True:
            status = requests.head(url).status_code
            try:
                print(url, status,responses[status], "\n")
            except:
                print(url, status, "Not an Standard HTTP Response code\n")
        else:
            print(url, "Not an valid URL\n")
            continue
  
if __name__ == "__main__":
    main()


输出:

错误至少需要 1 个参数

在上面的代码中,sys 库提供了用于操作Python运行时环境不同部分的函数和变量。它用于通过使用 argv 模块将参数作为输入,requests 库有助于建立 HTTP 连接, Python HTTP 客户端库中的响应模块提供了对 HTTP 响应代码的简短描述,validators 库用于验证 URL

如果条件验证用户至少传递了一个参数,如果条件失败,程序将退出并显示错误,指出用户需要指定至少一个 URL

第二步:创建帮助函数

帮助函数显示可用的命令并充当命令的文档。当帮助作为参数传递时运行

蟒蛇3

def usage():
    print("\nUsage:\nSingle URL: urlcheck \
    nMultiple URL's: urlcheck   ... \n")
  
if sys.argv[1]=="help":
    usage()
    sys.exit()

输出:

帮助命令

第 3 步:创建主函数

main函数是脚本开始执行时运行的函数,main函数包含我们 CLI 程序的所有逻辑。

蟒蛇3



def main():
    n = len(sys.argv)
      
    for i in range(1, n):
        url = sys.argv[i]
          
        if validators.url(url) is True:
            status = requests.head(url).status_code
            try:
                print(url, status, responses[status], "\n")
            except:
                print(url, status, "Not an Standard HTTP Response code\n")
          
        else:
            print(url, "Not an valid URL\n")
            continue

输出:

CLI 验证 URL 状态

在上面的代码中,变量“n”用于获取用户指定的参数数量。 for 循环一次运行一个参数并循环,直到所有参数都被传递。“URL”一次存储一个给定的参数,并在它是一个有效的 URL 时进行验证。它不是有效的 URL,else 块会打印警告并继续下一次迭代。如果它是有效的 URL,则请求库使用 HEAD 方法建立 HTTP 连接。 HEAD 方法类似于 GET 但在其响应中不包含任何 HTML,然后我们将响应的状态代码存储在“status”变量中

最后,我们尝试打印出 URL、它的响应状态码以及状态码的简短描述。如果状态码不是标准的 HTTP 响应状态码(CDN 使用自定义状态码),它会打印出 Not a Standard HTTP Response code。

步骤 4:创建自定义 CLI 命令

有多种方法可以创建自定义 CLI 命令,但我们将使用别名,因为它易于创建并且不需要对文件权限(或)更改目录进行任何更改。

对于 Windows:

您需要编辑文件 /C/'Program Files'/Git/etc/profile.d/aliases.sh 并为您的Python脚本添加位置

alias urlcheck="location to your python file"

对于 Mac 和 Linux:

你需要编辑 ~/.profile add location 到你的Python脚本

alias urlcheck="python3 ~/urlcheck/urlcheck.py"

保存 .profile 后运行以下命令以确保别名获得更新

source ~/.profile

下面是完整的实现:

蟒蛇3

import sys
import requests
from http.client import responses
import validators
  
if len(sys.argv) < 2:
    print('You need to specify at least url')
    sys.exit()
  
def usage():
    print("\nUsage:\nSingle URL: urlcheck \nMultiple\
    URL's: urlcheck   ... \n")
  
if sys.argv[1]=="help":
    usage()
    sys.exit()
  
def main():
    n = len(sys.argv)
    print("\n")
    for i in range(1, n):
        url = sys.argv[i]
        if validators.url(url) is True:
            status = requests.head(url).status_code
            try:
                print(url, status,responses[status], "\n")
            except:
                print(url, status, "Not an Standard HTTP Response code\n")
        else:
            print(url, "Not an valid URL\n")
            continue
  
if __name__ == "__main__":
    main()

输出:

最终的