From fd5da46a83887eb24b90d1998459a1343d7064fb Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 21 Apr 2025 22:03:18 -0500 Subject: [PATCH] Improve error messages during HTTP redirect parsing --- crates/uv-client/src/base_client.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/uv-client/src/base_client.rs b/crates/uv-client/src/base_client.rs index 925fd16c8..d21919a0e 100644 --- a/crates/uv-client/src/base_client.rs +++ b/crates/uv-client/src/base_client.rs @@ -548,29 +548,32 @@ impl RedirectClientWithMiddleware { }; // Handle redirect if we receive a 301, 302, 307, or 308. + let status = response.status(); if matches!( - response.status(), + status, StatusCode::MOVED_PERMANENTLY | StatusCode::FOUND | StatusCode::TEMPORARY_REDIRECT | StatusCode::PERMANENT_REDIRECT ) { - let location_str = response + let location = response .headers() .get("location") .ok_or(reqwest_middleware::Error::Middleware(anyhow!( - "Missing 302 location header" + "Missing expected HTTP {status} 'Location' header" )))? .to_str() .map_err(|_| { reqwest_middleware::Error::Middleware(anyhow!( - "Invalid 302 location header" + "Invalid HTTP {status} 'Location' value: must only contain visible ascii characters" )) })?; - let redirect_url = Url::parse(location_str).map_err(|_| { - reqwest_middleware::Error::Middleware(anyhow!("Invalid 302 location URL")) + let redirect_url = Url::parse(location).map_err(|err| { + reqwest_middleware::Error::Middleware(anyhow!( + "Invalid HTTP {status} 'Location' value `{location}`: {err}" + )) })?; - debug!("Received 302 redirect to {redirect_url}"); + debug!("Received HTTP {status} to {redirect_url}"); *request.url_mut() = redirect_url; redirects += 1; continue;