FlowiseAI/Flowise · error · Error

Failed to make GET request: ${error instanceof Error ? error

Error message

Failed to make GET request: ${error instanceof Error ? error.message : 'Unknown error'}

What it means

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.

Source

Thrown at packages/components/nodes/tools/RequestsGet/core.ts:181

            Object.entries(params.queryParams).forEach(([key, value]) => {
                url.searchParams.append(key, String(value))
            })
            finalUrl = url.toString()
        }

        try {
            const res = await secureFetch(finalUrl, {
                headers: requestHeaders
            })

            if (!res.ok) {
                throw new Error(`HTTP Error ${res.status}: ${res.statusText}`)
            }

            const text = await res.text()
            return text.slice(0, this.maxOutputLength)
        } catch (error) {
            throw new Error(`Failed to make GET request: ${error instanceof Error ? error.message : 'Unknown error'}`)
        }
    }
}

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Parse the suffix of the message after 'Failed to make GET request: ' to recover the root cause.
  2. If the cause is an SSRF/deny-list block, use a public URL or have an admin adjust the allow-list.
  3. If the cause is 'HTTP Error <code>', apply the fix for error 481.
  4. For network/TLS errors, verify connectivity and certificates from the Flowise host.

Example fix

// before
try {
  await tool._call({})
} catch (e) {
  console.error((e as Error).message) // opaque "Failed to make GET request: ..."
}

// after (parse root cause from wrapped message)
try {
  await tool._call({})
} catch (e) {
  const msg = (e as Error).message
  const cause = msg.replace(/^Failed to make GET request:\s*/, '')
  if (/HTTP Error (429|5\d\d)/.test(cause)) await retry()
  else if (/redirect|denied|SSRF/i.test(cause)) throw new Error('Configuration required: ' + cause)
  else throw e
}
Defensive patterns

Strategy: try-catch

Validate before calling

function classifyGetFailure(e: unknown): 'network' | 'ssrf' | 'http' | 'unknown' {
  const msg = e instanceof Error ? e.message : String(e)
  if (/HTTP Error \d{3}/.test(msg)) return 'http'
  if (/redirect|denied|ssrf|resolve|blocked/i.test(msg)) return 'ssrf'
  if (/ECONN|ENOTFOUND|ETIMEDOUT|certificate|fetch failed/i.test(msg)) return 'network'
  return 'unknown'
}

Type guard

const isWrappedGetFailure = (e: unknown): e is Error =>
  e instanceof Error && /^Failed to make GET request:/.test(e.message)

Try / catch

try {
  return await tool._call({})
} catch (e) {
  const cause = (e as Error).message.replace(/^Failed to make GET request:\s*/, '')
  switch (classifyGetFailure(e)) {
    case 'http':   /* parse status, retry on 429/5xx */ break
    case 'ssrf':   throw new Error('Target blocked by SSRF policy: ' + cause)
    case 'network':/* retry with backoff */ break
    default: throw e
  }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/ae95f68fe657ada9. Report an issue: GitHub.