Conversor cURL para Fetch (JS & Node)

Conversor cURL para Fetch (JS & Node)

Converta comandos cURL em código Fetch API instantaneamente. Processe cabeçalhos HTTP, tokens de autenticação, cookies e payloads JSON com async/await moderno.

Modelos Rápidos (Presets)
Comando cURL de Entrada
Variante de Sintaxe
Tempo Limite (Timeout em ms)10,000 ms
/**
 * Generated by ToolsAA cURL to Fetch Engine (ES2022 async/await)
 * Zero external dependencies. 100% Client-Side Executed.
 */
async function executeRequest() {
  const url = 'https://api.stripe.com/v1/payment_intents';

  const body = new URLSearchParams({
    'amount': '2000',
    'currency': 'usd',
    'payment_method_types[]': 'card',
  });

  const controller = new AbortController();
  const timeoutId = setTimeout(() => controller.abort(), 10000);

  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Basic ' + (typeof window !== 'undefined' ? btoa('sk_test_51MzEXAMPLESECRETKEY:') : Buffer.from('sk_test_51MzEXAMPLESECRETKEY:').toString('base64')),
      },
    body,
    credentials: 'include',
      signal: controller.signal,
    });

    clearTimeout(timeoutId);

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

    // Automatic MIME response parser
    const contentType = response.headers.get('content-type') || '';
    if (contentType.includes('application/json')) {
      const data = await response.json();
      return data;
    }

    return await response.text();
  } catch (error) {
    clearTimeout(timeoutId);
    if ((error as any)?.name === 'AbortError') {
      console.error('Request timed out after 10000ms');
    }
    throw error;
  }
}

// Call request
executeRequest()
  .then(data => console.log('Response Payload:', data))
  .catch(err => console.error('Fetch Execution Failed:', err));

Pipeline de Análise e Conversão Sintática

Tokens: 12•Cabeçalhos HTTP: 1•Índice de Compatibilidade 76%•BROWSER
1. Análise do cURLTokenização e análise léxica do comando cURL12 tokens (220 Caracteres)2. Mapeamento de HeadersAutenticação Ativa • Conexão Segura (HTTPS / TLS)POST1 Cabeçalhos HTTP3. Estruturação do BodyURLENCODED Visualização do Payload52 B (Body)4. Geração do Fetch76%BROWSER55 Linhas (10000ms)
Métrica PrincipalRFC 9110 DFA
Método HTTPPOST
Total de Cabeçalhos1
Tipo de PayloadURLENCODED
Eficiência e CapacidadeZero Transmissão Externa (100% no Cliente)
Saída LíquidaBROWSER
Referência técnica e guia de arquitetura

Conversor cURL para Fetch (JS & Node) — Guia de referência

Converta comandos cURL para a sintaxe da Fetch API instantaneamente. Transforme cabeçalhos HTTP, tokens de autenticação, cookies e payloads JSON em código JavaScript moderno com async/await.

Conversor cURL para Fetch (JS & Node) — Guia de referência — Arquitetura em memória do lado do cliente e fluxo de dados
Conversor cURL para Fetch (JS & Node) — Guia de referência — Arquitetura em memória do lado do cliente e fluxo de dados

Parâmetros-chave e controles

Comando cURL CLI (String)Comando Shell POSIX (Bash / Zsh)

Invocação bruta em linha de comando iniciada por 'curl'. Suporta quebras de linha com barra invertida (backslash), escape de aspas simples e duplas no shell e convenções padrão de flags POSIX.

Padrão: curl -X GET 'https://api.example.com/data'
Runtime e Sintaxe de Framework AlvoVariante de Destino (JavaScript / TypeScript)

Define a formatação do código gerado: async/await ES2022 padrão para navegador, TypeScript fortemente tipado com genéricos ApiResponse, sintaxe de servidor Node.js 18+ com AbortSignal, Next.js App Router com tags de cache ou sintaxe do cliente Axios.

Padrão: browser
Resolução do Método HTTP (-X / --request)Verbo HTTP RFC 9110 (GET, POST, PUT, DELETE, PATCH, HEAD)

Verbo da requisição HTTP. Quando -X é omitido, o cURL assume automaticamente GET, a menos que flags de corpo de requisição (-d, --data, -F) estejam presentes, as quais alteram implicitamente o método padrão para POST.

Padrão: GET
Cabeçalhos de Requisição HTTP (-H / --header)Pares Chave-Valor de Cabeçalho HTTP

Cabeçalhos de metadados da requisição. As implementações de fetch no navegador aplicam restrições de cabeçalhos proibidos (por exemplo, Host, Content-Length e Cookie não podem ser sobrescritos manualmente via Headers API por motivos de isolamento de segurança).

Padrão: Content-Type: application/json
Corpo de Dados do Payload (-d / --data / -F)Entidade do Corpo da Requisição HTTP

Carga de dados transmitida em requisições POST, PUT ou PATCH. Analisada dinamicamente para JSON.stringify() no caso de strings JSON, URLSearchParams() para application/x-www-form-urlencoded ou FormData() para uploads multipart.

Padrão: {}
Autenticação Basic e Bearer (-u / Bearer)String de Credencial de Autorização

Credenciais de autenticação. A flag cURL -u usuário:senha é sintetizada em 'Authorization: Basic <base64>', enquanto -H 'Authorization: Bearer <token>' é extraída em variáveis estruturadas com suporte opcional a mascaramento e ofuscação.

Padrão: Bearer <TOKEN>

Dicas profissionais e melhores práticas

O Fetch Não Rejeita Status HTTP 4xx ou 5xx (A Armadilha do response.ok)

Diferente da CLI do cURL (que imprime códigos de status de erro) ou do Axios (que rejeita promises em respostas 4xx/5xx), a Fetch API nativa do JavaScript só rejeita sua promise quando ocorre uma falha real de rede ou o CORS bloqueia a requisição. Um erro 404 Not Found, 401 Unauthorized ou 500 Internal Server Error ainda resolve a promise com sucesso. Você deve validar explicitamente 'if (!response.ok) throw new Error(`Erro HTTP! status: ${response.status}`);' antes de chamar response.json() ou response.text().

Nunca Defina Manualmente o Content-Type em Multipart/Form-Data no Fetch

Ao converter comandos cURL de upload de arquivos com -F ('--form') para Fetch, NÃO defina manualmente o cabeçalho 'Content-Type: multipart/form-data'. Fazer isso remove o parâmetro dinâmico de boundary (ex.: 'boundary=----WebKitFormBoundary...'), gerado automaticamente pelo navegador para delimitar as partes do payload. Apenas passe a instância de FormData diretamente para a opção body, e o navegador calculará automaticamente o Content-Type correto com os delimitadores de boundary.

Como Lidar com Dados de Formulário cURL -d vs Armadilhas de Serialização JSON

No cURL, passar -d sem um cabeçalho Content-Type explícito assume por padrão 'application/x-www-form-urlencoded', e não JSON. Muitos desenvolvedores envolvem erroneamente -d 'key=val&foo=bar' dentro de JSON.stringify(). Sempre verifique se o seu payload é composto por pares chave-valor (que devem usar 'new URLSearchParams({ key: 'val', foo: 'bar' })') ou JSON válido (que exige 'JSON.stringify(data)' e um cabeçalho explícito 'Content-Type: application/json').

Restrições de Cabeçalhos Proibidos no Navegador vs Recursos do cURL no Terminal

O cURL no terminal pode forjar qualquer cabeçalho HTTP, incluindo 'Cookie', 'User-Agent', 'Referer' e 'Host'. Contudo, no JavaScript Fetch do navegador, a especificação W3C classifica esses cabeçalhos como 'Forbidden Header Names' para mitigar falsificação de requisição cross-site (CSRF) e roubo de cookies. O fetch do navegador descarta silenciosamente cabeçalhos 'Cookie' manuais; em vez disso, passe 'credentials: "include"' (ou 'same-origin') para permitir que o gerenciador de cookies do navegador anexe os tokens de sessão automaticamente.

Armadilhas comuns e solução de problemas

⚠️TypeError: Failed to Fetch (Erro de CORS no Navegador Enquanto o cURL Funciona no Terminal)

O cURL é uma ferramenta de linha de comando isenta da Política de Mesma Origem (Same-Origin Policy - SOP) dos navegadores. Ao executar fetch() em JavaScript no lado do cliente contra uma API de terceiros que não retorna cabeçalhos 'Access-Control-Allow-Origin: *', o navegador bloqueia a resposta. Para resolver isso, faça a requisição a partir de um servidor backend (Node.js, Next.js Route Handler ou Cloudflare Worker), onde o CORS não se aplica, ou configure cabeçalhos CORS adequados no servidor de destino.

⚠️Unexpected Token in JSON at Position 0 ao Processar o Corpo da Resposta

Esse erro ocorre ao chamar 'await response.json()' em um endpoint que retornou um corpo vazio (ex.: 204 No Content), uma página de erro em HTML (ex.: Cloudflare 502 Bad Gateway) ou texto puro. Sempre verifique se 'response.headers.get('content-type')?.includes('application/json')' antes de invocar response.json(), ou faça a leitura com 'const text = await response.text()' e um tratamento seguro com JSON.parse.

⚠️Upload de Arquivo Multipart Form Falha com 'No Boundary Found' no Servidor

Isso acontece quando 'Content-Type: multipart/form-data' é declarado explicitamente nos cabeçalhos do fetch. Ao usar FormData(), remova totalmente o cabeçalho 'Content-Type' do objeto headers. O navegador ou o runtime do Node.js injetará automaticamente 'multipart/form-data; boundary=----WebKitFormBoundary...' com o delimitador boundary exato calculado.

⚠️Comando cURL com Quebras de Linha em Barra Invertida Falha ao Ser Analisado

Ao copiar comandos cURL de múltiplas linhas de scripts bash ou documentações técnicas, espaços em branco após o caractere de barra invertida ('\ ') fazem com que o bash e os analisadores interpretem a quebra de linha como caractere literal e não como continuação de argumentos. Nosso analisador normaliza automaticamente os tokens '\ ' e '\ ', limpando espaços sobressalentes e unificando os trechos do terminal em uma sequência de argumentos contínua.

Perguntas frequentes (FAQ)

Como converter um comando cURL em código JavaScript Fetch?▼

Para converter um comando cURL para Fetch, extraia a URL de destino da linha de comando, mapeie -X para a propriedade 'method' do fetch (GET, POST, PUT, DELETE), converta cada argumento -H em pares chave-valor no objeto 'headers', formate os payloads de -d ou --data em 'JSON.stringify(payload)' ou 'new URLSearchParams(payload)' dentro da propriedade 'body', e envolva a chamada em uma função 'async/await' com 'const response = await fetch(url, options)'.

Por que uma requisição cURL funciona no terminal, mas falha com erro de CORS no fetch?▼

O cURL opera como um cliente HTTP direto sem o sandbox de segurança do navegador, ignorando as políticas de Same-Origin Policy e regras de Cross-Origin Resource Sharing (CORS). Os navegadores modernos impõem o CORS para impedir que aplicações web não autorizadas acessem dados confidenciais de outras origens. Se o servidor de destino não enviar o cabeçalho 'Access-Control-Allow-Origin' correspondente à origem da sua aplicação, o navegador abortará a chamada fetch. Para corrigir isso, utilize um proxy backend ou uma rota de API serverless.

Como configurar autenticação Basic Auth do cURL (-u usuário:senha) no JavaScript Fetch?▼

No cURL, '-u usuario:senha' envia uma autenticação HTTP Basic. No JavaScript Fetch moderno para navegadores, codifique as credenciais em Base64 usando 'btoa("usuario:senha")' e anexe-as como 'headers: { Authorization: `Basic ${btoa("usuario:senha")}` }'. No Node.js, utilize 'Buffer.from("usuario:senha").toString("base64")' para obter exatamente o mesmo cabeçalho padrão.

Como enviar cookies na Fetch API de forma equivalente ao cURL -b cookie?▼

No JavaScript para navegador, o cabeçalho 'Cookie' é considerado um nome de cabeçalho proibido (forbidden header name) e não pode ser definido programaticamente nos cabeçalhos do fetch() por padrões de segurança. Para enviar cookies armazenados no navegador para o domínio de destino, defina 'credentials: "include"' nas opções do fetch. Em ambientes de servidor Node.js (onde as restrições de segurança do navegador não existem), você pode passar 'Cookie: session_id=xyz' diretamente no objeto headers.

Qual é a diferença entre cURL -d, --data-raw e --data-urlencode no Fetch?▼

No cURL, '-d' e '--data-raw' transmitem exatamente a string fornecida, assumindo o Content-Type 'application/x-www-form-urlencoded' por padrão, a menos que sobrescrito por -H. No Fetch, se os dados forem JSON, você deve serializá-los com JSON.stringify() e adicionar 'Content-Type: application/json'. Se o cURL usar '--data-urlencode', os valores dos parâmetros são codificados para URL antes do envio, o que no Fetch é tratado nativamente passando pares chave-valor para 'new URLSearchParams({ key: value }).toString()'.

Ferramentas e utilitários relacionados

Todas as ferramentas →