tonhowtf/omniget · error

o Cloudflare do Letterboxd barrou o download. Abra letterbox

Error message

o Cloudflare do Letterboxd barrou o download. Abra letterboxd.com no navegador, passe pelo "Just a moment" e capture os cookies de novo na extensão — o cf_clearance precisa vir junto

What it means

After downloading the Letterboxd data export ZIP, the tool checks whether the response is HTML or suspiciously small (<200 bytes) and runs is_cloudflare_wall on the body. If the content matches a Cloudflare challenge page ('Just a moment...'), it throws this error: Letterboxd's Cloudflare protection blocked the automated request because the captured cookies lack a valid cf_clearance token.

Solutions

  1. Open letterboxd.com in the browser, solve the 'Just a moment' challenge, then re-capture cookies in the extension so cf_clearance is included, and re-run.
  2. Make sure the capture happens on the same network/IP and with the same user-agent the Fetcher will use.
  3. Prefer downloading the ZIP manually at letterboxd.com/settings/data/ and passing its path via opts.zip_path to bypass the automated download entirely.
  4. Retry shortly after re-capturing; cf_clearance is time-limited, so run the tool soon after capture.

Example fix

// before
let opts = Options { zip_path: None, session_netscape: Some("old_cookies.txt".into()), .. };
run(&opts, p).await?; // hits Cloudflare wall
// after
let opts = Options { zip_path: Some("./letterboxd-export.zip".into()), .. };
run(&opts, p).await?; // manual download bypasses Cloudflare
Defensive patterns

Strategy: fallback

Try / catch

match letterboxd::run(&opts, &p).await {
    Err(e) if e.to_string().contains("Cloudflare") => {
        eprintln!("abra letterboxd.com no navegador, resolva o desafio, recapture os cookies e tente de novo");
        // fallback: peça ao usuário um ZIP baixado manualmente e rode com zip_path
    }
    other => other?,
}

Prevention

When it happens

Trigger: Calling run without a local zip_path (so the tool downloads EXPORT_URL) while the session's cf_clearance cookie is missing, expired, or was issued for a different IP/user-agent; the download returns the Cloudflare interstitial instead of the ZIP.

Common situations: Cookies captured before passing the Cloudflare challenge; cf_clearance expired (it is short-lived and IP/user-agent bound); user switched networks/VPNs after capturing cookies; user-agent mismatch between the extension capture and the Fetcher's requests.

Related errors


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/f58e9df2b2b769f0. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/lists/letterboxd.rs:388

        _ => {
            if !f.has_session() {
                return Err(anyhow!(
                    "sem sessão do Letterboxd: capture os cookies de letterboxd.com na extensão, ou aponte um ZIP já baixado de letterboxd.com/settings/data/"
                ));
            }
            report(
                &p,
                TOOL_ID,
                "progress",
                0,
                Some(3),
                Some(EXPORT_URL.to_string()),
            );
            let (b, ctype) = f.get_bytes(EXPORT_URL).await?;
            if ctype.contains("text/html") || b.len() < 200 {
                let body = String::from_utf8_lossy(&b);
                if is_cloudflare_wall(&body) {
                    return Err(anyhow!(
                        "o Cloudflare do Letterboxd barrou o download. Abra letterboxd.com no navegador, passe pelo \"Just a moment\" e capture os cookies de novo na extensão — o cf_clearance precisa vir junto"
                    ));
                }
                return Err(anyhow!(
                    "o Letterboxd devolveu uma página em vez do ZIP — a sessão salva expirou; capture os cookies de novo"
                ));
            }
            (b, EXPORT_URL.to_string())
        }
    };
    if opts.keep_zip {
        let _ = std::fs::write(dest.join("letterboxd-export.zip"), &bytes);
    }

    // 2. Normalização.
    report(
        &p,
        TOOL_ID,

View on GitHub (pinned to 8600b91f42)