Morganamilo/paru · error
{}: {}: {}
Error message
{}: {}: {} What it means
show_comments fetches the AUR package web page and parses its comment section. If the HTTP response status is not a success code, it bails with '{base}: {url}: {status}', surfacing the failing package, the requested URL, and the HTTP status code.
Solutions
- Verify the package base name exists on the AUR (e.g. browse https://aur.archlinux.org/packages/<name>)
- Retry later if the AUR is down or rate-limiting you
- Check proxy/VPN settings that could inject error responses
- Inspect the status code in the message to decide whether it's 404 (bad name) vs 5xx (server issue)
Defensive patterns
Strategy: try-catch
Validate before calling
// check the package exists before fetching comments
let st = reqwest::Client::new()
.head(format!("https://aur.archlinux.org/packages/{base}"))
.send().await?.status();
if !st.is_success() { eprintln!("package {base} not available: {st}"); } Try / catch
match result {
Err(e) if e.to_string().contains("404") => eprintln!("package not found on AUR"),
Err(e) => eprintln!("comment fetch failed: {e}"),
Ok(_) => {},
} Prevention
- Verify package names against the AUR RPC before scraping
- Handle AUR downtime and rate limits with backoff
- Check the HTTP status code embedded in the message before retrying blindly
When it happens
Trigger: Calling show_comments (e.g. via a comment-viewing CLI flag) where client.get(url).send() returns a response whose status().is_success() is false — 404 for a nonexistent package, 403/rate-limit, 5xx from the AUR servers.
Common situations: Viewing comments for a package name that was deleted from the AUR; AUR web outage or maintenance returning 5xx; being rate-limited or blocked (403) by the AUR web frontend; network proxy returning non-200 pages.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
AI-assisted analysis of Morganamilo/paru@9ac3578807 (2026-09-12).
Data as JSON: /api/errors/8b6dced9a34c023e.
Report an issue: GitHub.
Appendix: source
Thrown at src/download.rs:465
let bases = Bases::from_iter(warnings.pkgs);
let c = config.color;
for base in &bases.bases {
let mut url = config
.aur_url
.join(&format!("packages/{}", base.package_base()))?;
if config.comments >= 2 {
url.set_query(Some("PP=250"));
}
let response = client
.get(url.clone())
.send()
.await
.with_context(|| format!("{}: {}", base, url))?;
if !response.status().is_success() {
bail!("{}: {}: {}", base, url, response.status());
}
let document = scraper::Html::parse_document(&response.text().await?);
let titles_selector = scraper::Selector::parse("div.comments h4.comment-header").unwrap();
let comments_selector =
scraper::Selector::parse("div.comments div.article-content").unwrap();
let titles = document
.select(&titles_selector)
.map(|node| node.text().collect::<String>());
let comments = document
.select(&comments_selector)
.map(|node| node.text().collect::<String>());
let iter = titles.zip(comments).collect::<Vec<_>>();
if config.sort_mode == SortMode::TopDown {View on GitHub (pinned to 9ac3578807)