{"record":{"id":"309fa4cd58f9dd18","repo":"windmill-labs/windmill","slug":"error-executing-get-request-from-authed-http-clien","errorCode":null,"errorMessage":"Error executing get request from authed http client to {url} with query {query:?}: {e:#?}","messagePattern":"Error executing get request from authed http client to (.+?) with query (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/windmill-common/src/client.rs","lineNumber":43,"sourceCode":"    pub async fn get(&self, url: &str, query: Vec<(&str, String)>) -> anyhow::Result<Response> {\n        self.force_client\n            .as_ref()\n            .unwrap_or(&HTTP_CLIENT)\n            .get(url)\n            .query(&query)\n            .header(\n                reqwest::header::ACCEPT,\n                reqwest::header::HeaderValue::from_static(\"application/json\"),\n            )\n            .header(\n                reqwest::header::AUTHORIZATION,\n                reqwest::header::HeaderValue::from_str(&format!(\"Bearer {}\", self.token))?,\n            )\n            .send()\n            .await\n            .map_err(|e| {\n                tracing::error!(\"Error executing get request from authed http client to {url} with query {query:?}: {e:#?}\");\n                anyhow::anyhow!(\"Error executing get request from authed http client to {url} with query {query:?}: {e:#?}\")\n            })\n    }\n\n    /// Like [`AuthedClient::get`], but for a response whose size decides how\n    /// long it takes. `HTTP_CLIENT`'s total timeout would cut off a large one\n    /// partway through, so this uses the streaming client, which bounds only\n    /// the connect.\n    pub async fn get_streaming(\n        &self,\n        url: &str,\n        query: Vec<(&str, String)>,\n    ) -> anyhow::Result<Response> {\n        self.force_client\n            .as_ref()\n            .unwrap_or(&HTTP_CLIENT_STREAMING)\n            .get(url)\n            .query(&query)\n            .header(","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-common/src/client.rs#L25-L61","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nlet client = AuthedClient::new(HTTP_CLIENT.clone(), \"http://localhost:8000\", ...); // inside a container\n// after\nlet client = AuthedClient::new(HTTP_CLIENT.clone(), \"http://windmill_server:8000\", ...);","handlingStrategy":"retry","validationCode":"const url = new URL(baseUrl + path); // throws early on malformed URL\n// optionally pre-check reachability\nawait fetch(url, { method: 'HEAD' }).catch(e => { throw new Error(`target unreachable before call: ${e.cause}`); });","typeGuard":"function isReachableUrl(u) { try { const p = new URL(u); return p.protocol === 'http:' || p.protocol === 'https:'; } catch { return false; } }","tryCatchPattern":"match client.get(&url, Some(&query)).await {\n    Ok(resp) => resp,\n    Err(e) if e.to_string().contains(\"Error executing get request\") => {\n        // inspect logged e# cause: DNS vs connect vs timeout; retry with backoff\n        retry_with_backoff(3, || client.get(&url, Some(&query))).await\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["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"],"tags":["network","http","reqwest","timeout"],"backgroundTag":"http-request-failed","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}