golang快速网站链接检查工具插件muffet的使用

Golang快速网站链接检查工具插件Muffet的使用

Muffet简介

Muffet是一个网站链接检查工具,可以递归地爬取和检查网站中所有页面的链接。

主要特点:

  • 速度极快
  • 与Web浏览器高度兼容
  • 支持多种HTML标签(aimglinkscript等)
  • 支持多种输出格式(文本、JSON和JUnit XML)

安装Muffet

go install github.com/raviqqe/muffet/v2@latest

基本使用示例

muffet https://example.com

完整示例

简单检查网站链接

# 检查example.com网站的所有链接
muffet https://example.com

输出JSON格式

# 以JSON格式输出检查结果
muffet -format json https://example.com

限制并发请求数

# 限制并发请求数为10
muffet -c 10 https://example.com

排除特定URL模式

# 排除包含"admin"路径的URL
muffet -x "admin" https://example.com

设置超时时间

# 设置请求超时为10秒
muffet -timeout 10 https://example.com

高级用法

使用Docker运行

docker run -it --rm raviqqe/muffet https://example.com

在GitHub Actions中使用

name: Check Links
on: push
jobs:
  check-links:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run Muffet
        uses: raviqqe/muffet-action@v1
        with:
          url: https://example.com

许可证

Muffet使用MIT许可证。


更多关于golang快速网站链接检查工具插件muffet的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang快速网站链接检查工具插件muffet的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用muffet进行Golang网站链接检查

muffet是一个用Go编写的快速网站链接检查工具,它可以递归地检查网站中的所有链接,并报告断开的链接。以下是关于如何使用muffet的详细介绍。

安装muffet

首先,你需要安装muffet工具:

# 使用go安装
go install github.com/raviqqe/muffet@latest

# 或者直接下载预编译二进制文件
# 从GitHub发布页面下载适合你系统的版本

基本使用

最简单的使用方式是直接运行muffet并指定要检查的URL:

muffet https://example.com

这将递归检查example.com网站上的所有链接。

常用选项

muffet提供了多个有用的选项:

# 限制并发请求数(默认256)
muffet -c 32 https://example.com

# 设置超时时间(秒,默认10)
muffet -t 30 https://example.com

# 限制最大链接数(默认10000)
muffet -m 5000 https://example.com

# 排除某些URL模式
muffet -e ".*\.jpg" -e ".*\.png" https://example.com

# 跟随robots.txt规则
muffet -f https://example.com

# 显示进度条
muffet -p https://example.com

# 输出JSON格式结果
muffet -j https://example.com > results.json

在Go代码中使用muffet

虽然muffet主要是作为命令行工具使用,但你也可以在Go程序中调用它。以下是示例代码:

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/raviqqe/muffet"
)

func main() {
	// 创建muffet检查器
	c, err := muffet.New(
		muffet.WithConcurrency(32),          // 并发数
		muffet.WithTimeout(30*time.Second),  // 超时时间
		muffet.WithMaxLinks(10000),          // 最大链接数
		muffet.WithExcludedPatterns([]string{".*\\.jpg", ".*\\.png"}), // 排除模式
		muffet.WithFollowRobotsTxt(true),    // 遵循robots.txt
		muffet.WithProgressBar(os.Stderr),   // 显示进度条
	)
	if err != nil {
		log.Fatal(err)
	}

	// 运行链接检查
	ctx := context.Background()
	brokenLinks, err := c.Check(ctx, "https://example.com")
	if err != nil {
		log.Fatal(err)
	}

	// 处理结果
	for _, bl := range brokenLinks {
		fmt.Printf("Broken link found: %s\n", bl.URL)
		fmt.Printf("  Referenced from: %s\n", bl.Referer)
		fmt.Printf("  Status: %d %s\n", bl.StatusCode, bl.Status)
		fmt.Printf("  Error: %v\n", bl.Error)
		fmt.Println("---")
	}
}

高级用法

自定义HTTP客户端

你可以自定义HTTP客户端以满足特定需求:

c, err := muffet.New(
	muffet.WithHTTPClient(&http.Client{
		Transport: &http.Transport{
			MaxIdleConns:        100,
			IdleConnTimeout:     30 * time.Second,
			DisableCompression:  true,
		},
		Timeout: 30 * time.Second,
	}),
)

处理特定错误

brokenLinks, err := c.Check(ctx, "https://example.com")
if err != nil {
	var maxLinksErr *muffet.MaxLinksError
	if errors.As(err, &maxLinksErr) {
		log.Printf("Warning: reached maximum links limit (%d)", maxLinksErr.Limit)
	} else {
		log.Fatal(err)
	}
}

集成到CI/CD流程

你可以将muffet集成到CI/CD流程中,例如在GitHub Actions中:

name: Check Links

on: [push, pull_request]

jobs:
  link-check:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install muffet
      run: go install github.com/raviqqe/muffet@latest
    - name: Run link checker
      run: muffet -c 32 -t 30 https://yourwebsite.com

性能优化建议

  1. 对于大型网站,适当调整并发数(-c)以避免服务器过载
  2. 使用-e选项排除静态资源(如图片、CSS、JS文件)以加快检查速度
  3. 对于经常检查的网站,考虑缓存结果以提高后续检查速度

muffet是一个强大且高效的链接检查工具,特别适合大型网站的全面链接验证。通过合理配置选项,你可以在保证检查质量的同时优化检查速度。

回到顶部