cURL em JavaScript: Converter Solicitações para Fetch e Axios
Senior Web Scraping Engineer
TL;DR:
- Um comando cURL é um contrato de solicitação portátil, não código JavaScript. Converta deliberadamente o método, URL, cabeçalhos, corpo, autenticação, política de redirecionamento e tempo limite.
- Use
fetch()embutido para pequenos clientes baseados em padrões. Verifiqueresponse.ok, analise o corpo explicitamente e cancele solicitações com um sinal de aborto. - Use Axios quando interceptores, instâncias compartilhadas e política de solicitação centralizada melhorarem a aplicação. A solicitação de rede deve permanecer equivalente à chamada cURL comprovada.
- Mantenha segredos fora de comandos copiados e arquivos de origem. Leia chaves de API do ambiente e remova cabeçalhos gerados pelo navegador que o servidor não requer.
cURL é muitas vezes a maneira mais rápida de provar um endpoint HTTP. As ferramentas de desenvolvedor do navegador, a documentação da API e as equipes de suporte produzem todos comandos cURL copiáveis porque o formato torna a solicitação visível: URL, método, cabeçalhos e corpo estão em um só lugar.
Aplicações JavaScript precisam da mesma solicitação expressa como objetos e fluxo de controle assíncrono. Este guia mostra como traduzir cURL em Fetch e Axios sem perder comportamento e, em seguida, aplica o método a uma solicitação da API Scrapeless.
O Que Significa “Usar cURL em JavaScript”?
JavaScript não executa a sintaxe cURL nativamente. “Usar cURL em JavaScript” geralmente significa traduzir uma solicitação cURL funcional em fetch() ou Axios para que a aplicação envie a mesma mensagem HTTP.
A referência de linha de comando cURL define bandeiras como -X, -H, --data e --location. Cada bandeira tem um correspondente em JavaScript, mas o mapeamento nem sempre é um-para-um porque o shell, cURL, navegador e Node.js têm padrões diferentes.
Mapeamento de cURL para JavaScript
| elemento cURL | Fetch | Axios |
|---|---|---|
| URL | Primeiro argumento | url |
-X POST |
method: "POST" |
method: "post" |
-H |
objeto headers |
objeto headers |
--data / --json |
body |
data |
--location |
Redirecionamentos seguidos por padrão no uso comum do Fetch | Redirecionamentos tratados pelo adaptador Node |
--max-time |
Sinal de aborto | timeout |
| Corpo da saída | response.text() ou .json() |
response.data |
Não copie todos os cabeçalhos das ferramentas de desenvolvedor do navegador. Host, Content-Length, campos de nível de conexão, cookies temporários e cabeçalhos de rastreamento são normalmente gerados em tempo de execução ou específicos para uma sessão.
Passo 1: Comece Com uma Solicitação cURL Comprovada
Este exemplo público envia JSON para um endpoint de eco:
Os blocos de eco públicos nas Etapas 1–4 são contratos de solicitação ilustrativos; eles mostram um comportamento de rede equivalente sem reivindicar um resultado de serviço de produção.
bash
curl 'https://httpbin.org/anything' \
-X POST \
-H 'accept: application/json' \
-H 'content-type: application/json' \
--data '{"query":"browser automation","limit":3}'
Antes de convertê-lo, identifique o contrato:
- Método: POST.
- URL:
https://httpbin.org/anything. - Tipo de mídia da solicitação: JSON.
- Resposta aceita: JSON.
- Campos do corpo:
queryelimit.
Passo 2: Converter cURL para Fetch
Navegadores modernos e tempos de execução atuais do Node.js expõem a API Fetch. O guia MDN Fetch documenta as opções de solicitação e um comportamento importante: estados de erro HTTP ainda resolvem para um Response, então o código deve verificar response.ok.
javascript
const response = await fetch("https://httpbin.org/anything", {
method: "POST",
headers: {
accept: "application/json",
"content-type": "application/json",
},
body: JSON.stringify({ query: "browser automation", limit: 3 }),
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
console.log(data.json);
O objeto passado para JSON.stringify() é o contraparte direta do corpo JSON cURL. Não passe um objeto simples como body; Fetch espera um tipo de corpo como uma string, FormData ou bytes.
Passo 3: Adicione um Tempo Limite Explícito
Uma solicitação de aplicativo precisa de uma condição de parada. Use um sinal de aborto para que a operação e o consumo do corpo da resposta possam ser cancelados juntos. A documentação do AbortController descreve esse modelo de cancelamento.
javascript
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 15_000);
try {
const response = await fetch("https://httpbin.org/anything", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ query: "browser automation", limit: 3 }),
signal: controller.signal,
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
} finally {
clearTimeout(timer);
}
Mantenha os erros de transporte, os erros de status HTTP e os erros de esquema de resposta distintos. Eles apontam para causas diferentes e devem produzir logs diferentes.
Passo 4: Converter a Mesma Solicitação cURL para Axios
Axios aceita o corpo em data e analisa respostas JSON comuns em response.data. Sua documentação de configuração de solicitação lista cabeçalhos, tempo limite, autenticação e outros controles de cliente.
javascript
import axios from "axios";
const response = await axios({
method: "post",
url: "https://httpbin.org/anything",
headers: {
accept: "application/json",
"content-type": "application/json",
},
data: { query: "browser automation", limit: 3 },
timeout: 15_000,
});
console.log(response.data.json);
Axios é útil quando uma aplicação se beneficia de uma instância configurada:
javascript
const api = axios.create({
baseURL: "https://httpbin.org",
timeout: 15_000,
headers: { accept: "application/json" },
});
const { data } = await api.post("/anything", {
query: "browser automation",
limit: 3,
});
Comece a Coletar com Scrapeless
Potencialize seu fluxo de trabalho de raspagem da web e automação com o Scrapeless!
Inscreva-se hoje e ganhe $5 em crédito grátis — nenhum cartão de crédito necessário.
Reivindique seu crédito gratuito agora no Painel Scrapeless.
Passo 5: Converter uma Solicitação da API Scrapeless
O mesmo mapeamento funciona para uma solicitação gerenciada de aquisição da web. Este exemplo utiliza a API Universal Scraping da Scrapeless. Exige um SCRAPELESS_API_KEY de propriedade do leitor, portanto, os blocos protegidos por credenciais são exemplos de configuração em vez de resultados vivos reivindicados.
A forma cURL é:
bash
curl 'https://api.scrapeless.com/api/v2/unlocker/request' \
-H "x-api-token: ${SCRAPELESS_API_KEY}" \
-H 'content-type: application/json' \
--data '{
"actor":"unlocker.webunlocker",
"proxy":{"country":"ANY"},
"input":{
"url":"https://example.com/",
"jsRender":{"enabled":true,"response":{"type":"markdown"}}
}
}'
A tradução do Fetch é:
javascript
const payload = {
actor: "unlocker.webunlocker",
proxy: { country: "ANY" },
input: {
url: "https://example.com/",
jsRender: { enabled: true, response: { type: "markdown" } },
},
};
const response = await fetch(
"https://api.scrapeless.com/api/v2/unlocker/request",
{
method: "POST",
headers: {
"content-type": "application/json",
"x-api-token": process.env.SCRAPELESS_API_KEY,
},
body: JSON.stringify(payload),
},
);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const result = await response.json();
console.log(result);
A tradução do Axios muda apenas a forma do cliente:
javascript
const { data } = await axios.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
payload,
{
headers: { "x-api-token": process.env.SCRAPELESS_API_KEY },
timeout: 90_000,
},
);
console.log(data);
Fetch ou Axios: Qual Deveria Escolher?
Escolha Fetch quando o projeto quiser uma API baseada em padrões, dependências mínimas e manipulação de resposta explícita. Escolha Axios quando instâncias compartilhadas, interceptadores, transformações de solicitação ou uma política uniforme do cliente reduzirem o código da aplicação.
A escolha não deve mudar o contrato do servidor. Mantenha um comando cURL padrão para diagnósticos, depois confirme que o cliente JavaScript envia o mesmo método, cabeçalhos e corpo serializado.
Erros Comuns de Conversão
- Esquecer o
JSON.stringify()em uma solicitação Fetch. - Supor que o Fetch lança automaticamente em uma resposta 404 ou 500.
- Copiar um cookie ou valor de autorização temporário para o código fonte.
- Enviar
datadentro das opções do Fetch em vez debody. - Enviar
bodyno Axios em vez dedata. - Analisar cada resposta como JSON sem verificar
content-type. - Transportar cabeçalhos exclusivos do navegador para um cliente Node.js.
- Omitir um tempo limite explícito ou sinal de interrupção.
O guia cURL JSON da Scrapeless cobre a citação de shell e arquivos de carga útil em mais profundidade. Verifique a precificação atual da Scrapeless quando o cliente traduzido passar de validação local para aquisição sustentada.
Conclusão
Converter cURL para JavaScript é uma tradução controlada de um contrato HTTP. Mapeie a URL, método, cabeçalhos, corpo, autenticação, redirecionamentos, tempo limite e análise de resposta um a um. O Fetch mantém o cliente próximo aos padrões da web; o Axios adiciona conveniências em nível de aplicação. Um comando cURL verificado continua a ser a melhor referência de diagnóstico para ambos.
Pronto para Transformar uma Solicitação Comprovada em um Fluxo de Trabalho de Dados?
Junte-se à comunidade Scrapeless no Discord ou Telegram. Crie uma conta no Painel Scrapeless e transporte uma solicitação cURL funcional para o cliente JavaScript que sua aplicação já usa.
FAQ
Q: O JavaScript pode executar um comando cURL diretamente?
O JavaScript normalmente traduz a solicitação cURL em Fetch ou Axios. Um processo Node.js pode iniciar o binário externo curl, mas isso adiciona uma dependência de sistema operacional e raramente é necessário para chamadas HTTP de aplicativos.
Q: O Fetch está disponível no Node.js?
Versões atuais do Node.js fornecem uma API Fetch global compatível com o navegador. Verifique a documentação oficial do runtime e a política de suporte antes de escolher a versão mínima do projeto.
Q: Por que o Fetch não lança em 404 HTTP?
O Fetch trata uma resposta HTTP como uma operação de rede concluída mesmo quando o status sinaliza um erro de aplicativo. Verifique response.ok ou response.status antes de analisar o corpo.
Q: O Axios é melhor que o Fetch?
O Axios é melhor quando suas instâncias, interceptadores, transformações e configuração de tempo limite simplificam um cliente maior. O Fetch é melhor quando uma pequena superfície baseada em padrões sem dependências é suficiente.
Q: Como as chaves da API devem ser tratadas durante a conversão?
Leia as chaves da API a partir de variáveis de ambiente ou de um serviço de segredos, injete-as em tempo de execução e oculte-as dos logs. Nunca cole uma chave real em um comando cURL comprometido em um repositório.
Q: Quando uma solicitação JavaScript precisa do Scrapeless?
Um cliente JavaScript se beneficia do Scrapeless quando o alvo requer renderização gerenciada, egressos regionais, infraestrutura de sessão ou aquisição estruturada além de uma resposta HTTP direta.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



