windmill-labs/windmill · error
Error executing get request from authed http client to {url}
Error message
Error executing get request from authed http client to {url} with query {query:?}: {e:#?} What it means
The authed internal HTTP client's `get` performs a GET with a Bearer token against a Windmill server URL; when reqwest fails (DNS, connect, timeout, TLS, 4xx/5xx are separate but send() itself fails on transport), it logs and rethrows this error including the URL, query, and debug-formatted cause. Called by get_resource_value_interpolated, dbt_warehouse_exists, and make_basic_get_request.
Source
Thrown at backend/windmill-common/src/client.rs:43
pub async fn get(&self, url: &str, query: Vec<(&str, String)>) -> anyhow::Result<Response> {
self.force_client
.as_ref()
.unwrap_or(&HTTP_CLIENT)
.get(url)
.query(&query)
.header(
reqwest::header::ACCEPT,
reqwest::header::HeaderValue::from_static("application/json"),
)
.header(
reqwest::header::AUTHORIZATION,
reqwest::header::HeaderValue::from_str(&format!("Bearer {}", self.token))?,
)
.send()
.await
.map_err(|e| {
tracing::error!("Error executing get request from authed http client to {url} with query {query:?}: {e:#?}");
anyhow::anyhow!("Error executing get request from authed http client to {url} with query {query:?}: {e:#?}")
})
}
/// Like [`AuthedClient::get`], but for a response whose size decides how
/// long it takes. `HTTP_CLIENT`'s total timeout would cut off a large one
/// partway through, so this uses the streaming client, which bounds only
/// the connect.
pub async fn get_streaming(
&self,
url: &str,
query: Vec<(&str, String)>,
) -> anyhow::Result<Response> {
self.force_client
.as_ref()
.unwrap_or(&HTTP_CLIENT_STREAMING)
.get(url)
.query(&query)
.header(View on GitHub (pinned to e474e8803c)
Solutions
- Read the debug cause (e#) in the log: distinguish DNS vs connect vs timeout vs TLS and fix accordingly.
- Verify the base URL/server the AuthedClient was constructed with is reachable: curl the same URL from the same host.
- Fix DNS/hostname (use the docker-compose service name, not localhost, inside containers).
- If timeouts, raise the client timeout or reduce the response size; if TLS, check certs/proxy.
Example fix
// before let client = AuthedClient::new(HTTP_CLIENT.clone(), "http://localhost:8000", ...); // inside a container // after let client = AuthedClient::new(HTTP_CLIENT.clone(), "http://windmill_server:8000", ...);
Defensive patterns
Strategy: retry
Validate before calling
const url = new URL(baseUrl + path); // throws early on malformed URL
// optionally pre-check reachability
await fetch(url, { method: 'HEAD' }).catch(e => { throw new Error(`target unreachable before call: ${e.cause}`); }); Type guard
function isReachableUrl(u) { try { const p = new URL(u); return p.protocol === 'http:' || p.protocol === 'https:'; } catch { return false; } } Try / catch
match client.get(&url, Some(&query)).await {
Ok(resp) => resp,
Err(e) if e.to_string().contains("Error executing get request") => {
// inspect logged e# cause: DNS vs connect vs timeout; retry with backoff
retry_with_backoff(3, || client.get(&url, Some(&query))).await
}
Err(e) => return Err(e),
} Prevention
- Use the service hostname (not localhost) inside containers
- Curl the target from the same host before debugging app code
- Keep client timeouts sized to expected response times
- Centralize the base URL in env config and validate at startup
When it happens
Trigger: Any caller of AuthedClient::get (backend/windmill-common/src/client.rs:43) when the target server is down/unreachable, DNS fails, the request times out, TLS handshake fails, or the base URL is malformed.
Common situations: Self-hosted instance with wrong base URL/port in env; container using localhost instead of the service hostname; network policy blocking egress; token/token-refresh side effects causing connection reset; resource interpolation pointing at a server that no longer exists.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- Error streaming get request from authed http client to {url}
- e (Slack chat.update request error propagated via anyhow)
- ApiError with mapped HTTP status message (e.g. "Not Found",
- Generic Error: status: ${errorStatus}; status text: ${errorS
- Couldn't fetch resource types from hub ${hubBaseUrl}: ${(awa
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/309fa4cd58f9dd18.
Report an issue: GitHub.