Converta comandos curl para código JavaScript - Gere código JavaScript fetch/axios pronto para uso para requisições de API
// JavaScript code will appear here // Example: // Using fetch API fetch('https://api.example.com/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'test' }) }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));
Aqui estão alguns comandos curl comuns que você pode converter para código JavaScript:
curl https://api.example.com/users
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","email":"[email protected]"}' https://api.example.com/users
curl -X PUT -H "Authorization: Bearer token123" -d '{"status":"active"}' https://api.example.com/users/1
curl -X DELETE https://api.example.com/users/1
curl -H "X-API-Key: abc123" -H "Accept: application/json" https://api.example.com/data
JavaScript oferece múltiplas maneiras de fazer requisições HTTP. Aqui estão padrões comuns usando tanto a API Fetch quanto Axios:
const formData = new FormData(); formData.append('file', document.querySelector('#fileInput').files[0]); fetch('https://api.example.com/upload', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN_HERE' }, body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));
const controller = new AbortController(); const signal = controller.signal; // Set timeout of 5 seconds const timeoutId = setTimeout(() => controller.abort(), 5000); fetch('https://api.example.com/data', { method: 'GET', signal: signal }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } clearTimeout(timeoutId); return response.json(); }) .then(data => console.log(data)) .catch(error => { if (error.name === 'AbortError') { console.error('Request timed out'); } else { console.error('Error:', error); } });
Copie seu comando curl → Cole na caixa de entrada → Obtenha código JavaScript instantaneamente
axios.get('https://api.example.com/data') .then(response => { console.log(response.data); }) .catch(error => { if (error.response) { // Server returned an error status code console.error(`Server error: ${error.response.status}`); console.error(error.response.data); } else if (error.request) { // Request was made but no response received console.error('Network error - no response received'); } else { // Error in request setup console.error('Request error:', error.message); } });
// Using fetch with AbortController const controller = new AbortController(); const signal = controller.signal; // Cancel request after 5 seconds setTimeout(() => controller.abort(), 5000); fetch('https://api.example.com/data', { signal }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => { if (error.name === 'AbortError') { console.log('Request was cancelled'); } else { console.error('Error:', error); } }); // Using axios with CancelToken const source = axios.CancelToken.source(); // Cancel request after 5 seconds setTimeout(() => { source.cancel('User cancelled the request'); }, 5000); axios.get('https://api.example.com/data', { cancelToken: source.token }) .then(response => console.log(response.data)) .catch(error => { if (axios.isCancel(error)) { console.log('Request cancelled:', error.message); } else { console.error('Error:', error); } });
R: Enquanto curl é uma ferramenta de linha de comando para fazer requisições HTTP, a API fetch do JavaScript fornece uma interface programática dentro de navegadores web e Node.js. Fetch usa Promises para lidar com operações assíncronas, enquanto curl executa sincronamente. Além disso, fetch segue redirecionamentos automaticamente e não envia cookies por padrão, enquanto curl faz ambos a menos que configurado de outra forma.
R: Fetch é integrado em navegadores modernos, mas requer mais código padrão para tratamento de erros e não analisa automaticamente respostas JSON. Axios é uma biblioteca que fornece uma API mais rica em recursos com análise JSON automática, melhor tratamento de erros, interceptação de requisição/resposta e cancelamento de requisição integrado. Axios também funciona consistentemente em ambientes de navegadores e Node.js.
R: Restrições CORS (Compartilhamento de Recursos de Origem Cruzada) se aplicam ao JavaScript baseado em navegador, mas não ao curl. Ao converter comandos curl para JavaScript, você pode encontrar erros CORS se o servidor não incluir cabeçalhos CORS apropriados. Soluções incluem: usar um proxy CORS, solicitar ao proprietário da API para habilitar cabeçalhos CORS, implementar um proxy do lado do servidor em sua aplicação, ou usar Node.js para requisições que não rodam no navegador.
R: Em JavaScript baseado em navegador, você não pode ignorar a validação de certificado SSL, pois é um recurso de segurança imposto pelos navegadores. No Node.js, você pode definir a opção rejectUnauthorized: false
na configuração do agente HTTPS. No entanto, isso é fortemente desencorajado em produção, pois compromete a segurança. Exemplo: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});
R: Para lidar com uploads de arquivo em JavaScript similar à flag -F do curl, use a API FormData. Por exemplo: const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData });
Esta abordagem funciona tanto com fetch quanto com axios.
R: Com a API fetch, use AbortController com setTimeout: const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal });
Com axios, use a opção timeout: axios.get(url, { timeout: 5000 });
Ambas abordagens permitem controlar quanto tempo esperar antes de cancelar uma requisição.
R: Enquanto curl oferece a flag -v/--verbose para informações detalhadas de requisição/resposta, JavaScript fornece diferentes ferramentas de depuração. Nos navegadores, use a aba Network no DevTools para inspecionar requisições, cabeçalhos, payloads e timing. Para depuração programática, você pode usar interceptadores axios para registrar detalhes de requisição/resposta ou implementar registro personalizado com fetch. No Node.js, você pode usar bibliotecas como 'http-debug' ou definir a variável de ambiente NODE_DEBUG=http.
Entender comandos curl é essencial para teste eficaz de API com JavaScript. Aqui está uma referência rápida de opções curl comuns que nosso conversor suporta:
curl [options] [URL]
-X, --request METHOD
: Specify request method (GET, POST, PUT, DELETE, etc.)-H, --header LINE
: Add header to the request-d, --data DATA
: Send data in POST request-F, --form CONTENT
: Submit form data-u, --user USER:PASSWORD
: Server user and password-k, --insecure
: Allow insecure server connections-I, --head
: Show document info only-v, --verbose
: Make the operation more verbose-s, --silent
: Silent mode--connect-timeout SECONDS
: Maximum time for connectionNosso conversor JavaScript lida com comandos curl complexos incluindo múltiplos cabeçalhos, autenticação, payloads de dados e várias opções. Simplesmente cole seu comando curl e obtenha código JavaScript limpo e moderno usando a API Fetch ou Axios.
Ao trabalhar com a API Fetch do JavaScript ou Axios, siga estas melhores práticas para interações de API eficientes e seguras:
// Using async/await with fetch async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const data = await response.json(); console.log(data); return data; } catch (error) { console.error('Fetch error:', error); } } // Using async/await with axios async function fetchDataWithAxios() { try { const response = await axios.get('https://api.example.com/data'); console.log(response.data); return response.data; } catch (error) { console.error('Axios error:', error); } }
async function fetchWithRetry(url, options = {}, retries = 3, backoff = 300) { try { const response = await fetch(url, options); return response; } catch (error) { if (retries <= 1) throw error; await new Promise(resolve => setTimeout(resolve, backoff)); return fetchWithRetry(url, options, retries - 1, backoff * 2); } }
// Create configurable API client with axios const apiClient = axios.create({ baseURL: 'https://api.example.com', timeout: 10000, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); // Add request interceptors apiClient.interceptors.request.use(config => { // Do something before request is sent const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => { return Promise.reject(error); }); // Add response interceptors apiClient.interceptors.response.use(response => { // Any status code within 2xx range return response; }, error => { // Handle 401 Unauthorized errors if (error.response && error.response.status === 401) { console.log('Unauthorized, please login again'); } return Promise.reject(error); }); // Use the API client apiClient.get('/users') .then(response => console.log(response.data)) .catch(error => console.error(error));
// Using Promise.all with fetch async function fetchMultipleResources() { try { const [users, products, orders] = await Promise.all([ fetch('https://api.example.com/users').then(res => res.json()), fetch('https://api.example.com/products').then(res => res.json()), fetch('https://api.example.com/orders').then(res => res.json()) ]); console.log({ users, products, orders }); return { users, products, orders }; } catch (error) { console.error('Error fetching data:', error); } } // Using axios.all for concurrent requests async function fetchMultipleResourcesWithAxios() { try { const [users, products, orders] = await axios.all([ axios.get('https://api.example.com/users'), axios.get('https://api.example.com/products'), axios.get('https://api.example.com/orders') ]); console.log({ users: users.data, products: products.data, orders: orders.data }); } catch (error) { console.error('Error fetching data:', error); } }
// Simple in-memory cache implementation const cache = new Map(); async function fetchWithCache(url, options = {}, ttl = 60000) { const cacheKey = `${url}-${JSON.stringify(options)}`; // Check cache const cachedItem = cache.get(cacheKey); if (cachedItem && Date.now() < cachedItem.expiry) { console.log('Using cached data'); return cachedItem.data; } // If no cache or expired, make the request const response = await fetch(url, options); const data = await response.json(); // Update cache cache.set(cacheKey, { data, expiry: Date.now() + ttl }); return data; }