{"record":{"id":"ae95f68fe657ada9","repo":"FlowiseAI/Flowise","slug":"failed-to-make-get-request-error-instanceof-err","errorCode":null,"errorMessage":"Failed to make GET request: ${error instanceof Error ? error.message : 'Unknown error'}","messagePattern":"Failed to make GET request: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/tools/RequestsGet/core.ts","lineNumber":181,"sourceCode":"            Object.entries(params.queryParams).forEach(([key, value]) => {\n                url.searchParams.append(key, String(value))\n            })\n            finalUrl = url.toString()\n        }\n\n        try {\n            const res = await secureFetch(finalUrl, {\n                headers: requestHeaders\n            })\n\n            if (!res.ok) {\n                throw new Error(`HTTP Error ${res.status}: ${res.statusText}`)\n            }\n\n            const text = await res.text()\n            return text.slice(0, this.maxOutputLength)\n        } catch (error) {\n            throw new Error(`Failed to make GET request: ${error instanceof Error ? error.message : 'Unknown error'}`)\n        }\n    }\n}\n","sourceCodeStart":163,"sourceCodeEnd":185,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/tools/RequestsGet/core.ts#L163-L185","documentation":"This is the outer catch-all of RequestsGet_Core._call. It wraps every failure from secureFetch (network error, SSRF deny-list block, redirect overflow, the inner HTTP Error from 481) into a single 'Failed to make GET request: <cause>' message. As shipped, this is the error callers actually observe; the inner HTTP Error (481) never propagates unwrapped.","triggerScenarios":"Any failure during secureFetch: DNS/TCP failure, TLS error, SSRF-blocked host (private/reserved IP in redirect chain), 'Too many redirects', non-ok HTTP status, or response read error.","commonSituations":"Target host is unreachable or behind a firewall; URL points to a private/internal IP that Flowise's deny list blocks (SSRF protection); self-signed or expired TLS cert; redirect loop; the inner status-code error (481) being re-wrapped here.","solutions":["Parse the suffix of the message after 'Failed to make GET request: ' to recover the root cause.","If the cause is an SSRF/deny-list block, use a public URL or have an admin adjust the allow-list.","If the cause is 'HTTP Error <code>', apply the fix for error 481.","For network/TLS errors, verify connectivity and certificates from the Flowise host."],"exampleFix":"// before\ntry {\n  await tool._call({})\n} catch (e) {\n  console.error((e as Error).message) // opaque \"Failed to make GET request: ...\"\n}\n\n// after (parse root cause from wrapped message)\ntry {\n  await tool._call({})\n} catch (e) {\n  const msg = (e as Error).message\n  const cause = msg.replace(/^Failed to make GET request:\\s*/, '')\n  if (/HTTP Error (429|5\\d\\d)/.test(cause)) await retry()\n  else if (/redirect|denied|SSRF/i.test(cause)) throw new Error('Configuration required: ' + cause)\n  else throw e\n}","handlingStrategy":"try-catch","validationCode":"function classifyGetFailure(e: unknown): 'network' | 'ssrf' | 'http' | 'unknown' {\n  const msg = e instanceof Error ? e.message : String(e)\n  if (/HTTP Error \\d{3}/.test(msg)) return 'http'\n  if (/redirect|denied|ssrf|resolve|blocked/i.test(msg)) return 'ssrf'\n  if (/ECONN|ENOTFOUND|ETIMEDOUT|certificate|fetch failed/i.test(msg)) return 'network'\n  return 'unknown'\n}","typeGuard":"const isWrappedGetFailure = (e: unknown): e is Error =>\n  e instanceof Error && /^Failed to make GET request:/.test(e.message)","tryCatchPattern":"try {\n  return await tool._call({})\n} catch (e) {\n  const cause = (e as Error).message.replace(/^Failed to make GET request:\\s*/, '')\n  switch (classifyGetFailure(e)) {\n    case 'http':   /* parse status, retry on 429/5xx */ break\n    case 'ssrf':   throw new Error('Target blocked by SSRF policy: ' + cause)\n    case 'network':/* retry with backoff */ break\n    default: throw e\n  }\n}","preventionTips":["Always parse the suffix after 'Failed to make GET request: ' to find the root cause.","Whitelist public hosts in Flowise's SSRF config when targeting internal services is genuinely required (admin decision).","Distinguish retryable (network/5xx) from permanent (4xx, SSRF) causes before retrying."],"tags":["http","network","error-wrapping","ssrf","get"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}