xpzouying/xiaohongshu-mcp · error

%s SHA256 不匹配:期望 %s,实际 %s

Error message

%s SHA256 不匹配:期望 %s,实际 %s

What it means

verifySHA256 的完整性校验失败分支:计算出的归档文件实际 SHA256 与 SHA256SUMS 中该 asset 的期望哈希不一致(不区分大小写比较)。说明下载产物被损坏或被篡改/替换,拒绝使用该文件。

Source

Thrown at browser/browser_download.go:145

// verifySHA256 下载同目录的 SHA256SUMS,校验 asset 的哈希。
func verifySHA256(archivePath, asset string) error {
	want, err := fetchExpectedSHA(asset)
	if err != nil {
		return err
	}
	f, err := os.Open(archivePath)
	if err != nil {
		return err
	}
	defer f.Close()
	h := sha256.New()
	if _, err := io.Copy(h, f); err != nil {
		return err
	}
	got := hex.EncodeToString(h.Sum(nil))
	if !strings.EqualFold(got, want) {
		return fmt.Errorf("%s SHA256 不匹配:期望 %s,实际 %s", asset, want, got)
	}
	return nil
}

func fetchExpectedSHA(asset string) (string, error) {
	resp, err := (&http.Client{Timeout: 30 * time.Second}).Get(browserURL("SHA256SUMS"))
	if err != nil {
		return "", err
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return "", fmt.Errorf("获取 SHA256SUMS: HTTP %d", resp.StatusCode)
	}
	sc := bufio.NewScanner(resp.Body)
	for sc.Scan() {
		// 格式:<hash>␠␠<filename>
		fields := strings.Fields(sc.Text())
		if len(fields) == 2 && fields[1] == asset {

View on GitHub (pinned to 332d196854)

Solutions

  1. 删除缓存的压缩包重新下载,再观察哈希是否一致
  2. 检查代理是否改写响应内容,尝试直连或换网络
  3. 确认资产 URL 与 SHA256SUMS 来自同一版本
  4. 用 sha256sum 手动比对期望/实际值定位差异

Example fix

// before
// 缓存中有损坏文件
bin, err := browser.EnsureBrowser() // SHA256 不匹配
// after
os.Remove(filepath.Join(cacheDir, asset)) // 删除损坏文件
bin, err := browser.EnsureBrowser()
Defensive patterns

Strategy: retry

Validate before calling

// 下载后本地快速校验
// expected=$(curl -s $BASE/SHA256SUMS | grep <asset> | awk '{print $1}')
// actual=$(sha256sum <archive> | awk '{print $1}')
// [ "$expected" = "$actual" ] || 删除文件重试

Try / catch

bin, err := browser.EnsureBrowser()
if err != nil && strings.Contains(err.Error(), "SHA256 不匹配") {
	os.RemoveAll(cacheDir) // 清理被篡改/损坏的下载
	bin, err = browser.EnsureBrowser()
	if err != nil { return fmt.Errorf("重下载后仍校验失败: %w", err) }
}

Prevention

When it happens

Trigger: verifySHA256 → 比较失败:下载被中间层(代理/镜像)篡改或返回了错误页面、下载中断产生截断文件、SHA256SUMS 与资产版本不匹配、磁盘位损坏。

Common situations: 企业代理做了内容改写/注入;CDN 上资产与 SUMS 版本不同步;断点续传拼接出损坏文件。

Related errors


AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05). Data as JSON: /api/errors/0e3c939282102c16. Report an issue: GitHub.