YamlBox

Web e codificação · 5 min de leitura

cURL para buscar: movendo uma solicitação do terminal para o

Uma conversão cURL para buscar é o caminho usual da documentação de um API para o código de frontend funcional: a maneira mais rápida de entender um API é um comando cURL copiado de seus documentos, e a maneira mais rápida de enviá-lo é `fetch`. A conversão entre eles é principalmente mecânica – os sinalizadores são mapeados em um objeto de opções – mas duas coisas rotineiramente quebram a tradução: codificações corporais e o modelo de segurança do navegador que não tem equivalente em um terminal.

Atualizado

Como as bandeiras são mapeadas

  • `-X POST` → `method: "POST"` (ou deduza o método de `-d`).
  • `-H "Content-Type: application/json"` → uma entrada em `headers`.
  • `-d '{"a":1}'` → `body: JSON.stringify(...)`; cURL envia-o codificado em formulário, a menos que você diga o contrário.
  • `--data-binary @file` → um corpo `Blob`, `FormData` ou `ArrayBuffer` em vez de uma corda.
  • `-u user:pass` → um cabeçalho `Authorization: Basic …` construído a partir da base64 de `user:pass`.
  • `-F name=@file` → `FormData` por `File`, que é como os uploads de arquivos são expressos.
                await fetch('https://api.example.com/v1/orders', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer ' + token,
  },
  body: JSON.stringify({ sku: 'YB-1', qty: 2 }),
});
              

CORS: a parte em que cURL nunca teve que pensar

cURL é executado fora do modelo de segurança do navegador, portanto pode chamar qualquer host que atenda. `fetch` em uma página é vinculado ao CORS: o servidor precisa permitir sua origem e, para qualquer coisa além de simples solicitações, ele também precisa responder corretamente a um preflight `OPTIONS`. Um comando convertido que funciona perfeitamente no terminal pode falhar no navegador com um erro de rede opaco exatamente por esse motivo - e nenhuma edição de cabeçalho na solicitação irá consertar isso, porque a permissão tem que vir do servidor.

Se uma busca falhar com uma mensagem CORS, a correção estará no API ou no seu proxy — não no JavaScript. Nunca contorne isso colocando uma chave API no código do cliente para “evitar” o problema.

Credenciais, redirecionamentos e streaming

Mais dois comportamentos diferem do terminal. Os cookies não são enviados a menos que você passe `credentials: "include"`, e o servidor deve responder com uma origem explícita em vez de um curinga. Os redirecionamentos são seguidos por padrão por `redirect: "follow"`, mas um redirecionamento perde o cabeçalho `Authorization` entre as origens, a menos que o servidor lide com isso, e é por isso que as chamadas autenticadas geralmente precisam de `redirect: "manual"` e de um acompanhamento deliberado. As respostas de streaming são lidas em `response.body` como `ReadableStream`, onde cURL simplesmente é impresso conforme é recebido.

Buscar ou axios?

`fetch` está integrado e funciona em qualquer lugar moderno; axios adiciona conveniência — análise JSON automática, interceptadores, um erro legível para respostas não-2xx, progresso de upload em tempos de execução mais antigos. Um comando cURL convertido é um ponto de partida confiável para: colar as opções geradas em uma chamada de axios e os cabeçalhos e o corpo permanecem inalterados.

Converta sem vazar

Comandos cURL copiados de sessões reais geralmente carregam tokens de portador ativos, chaves API ou cookies de sessão. Uma conversão executada no navegador mantém essas credenciais em sua máquina, que é a única maneira sensata de trabalhar com uma solicitação que você não digitou.

cURL para buscar — perguntas frequentes

Por que minha solicitação de busca convertida falha com um erro CORS?

Porque o navegador impõe a política de mesma origem e o cURL não. O API deve enviar o cabeçalho `Access-Control-Allow-Origin` apropriado e lidar com solicitações de comprovação. Proxy através de seu próprio back-end é a solução padrão quando um API de terceiros não permite origens de navegador.

Como envio dados de formulário com fetch em vez de JSON?

Use um objeto `FormData` como corpo e deixe o navegador definir o limite multipartes — não defina `Content-Type` você mesmo, porque o valor inclui um token de limite gerado pelo navegador. Isso também cobre uploads de arquivos de sinalizadores `-F`.

A busca envia cookies por padrão?

Não. Solicitações de mesma origem incluem cookies quando `credentials: "same-origin"` se aplica, mas chamadas de origem cruzada precisam de `credentials: "include"`, e o servidor deve responder com uma origem explícita em vez de um curinga para permitir que a resposta seja lida.

Ferramentas mencionadas nesta postagem

Navegue pela lista completa de 19 ferramentas

Mais artigos para ler

Todas as 19 postagens →