Convertissez les commandes curl en code JavaScript - Générez du code JavaScript fetch/axios prêt à l'emploi pour les requêtes 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));
Voici quelques commandes curl courantes que vous pouvez convertir en code 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 offre plusieurs façons de faire des requêtes HTTP. Voici des modèles courants utilisant à la fois l'API Fetch et 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); } });
Copiez votre commande curl → Collez-la dans la zone de saisie → Obtenez du code JavaScript instantanément
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 : Alors que curl est un outil en ligne de commande pour faire des requêtes HTTP, l'API fetch de JavaScript fournit une interface programmatique dans les navigateurs web et Node.js. Fetch utilise des Promesses pour gérer les opérations asynchrones, tandis que curl s'exécute de manière synchrone. De plus, fetch suit automatiquement les redirections et n'envoie pas de cookies par défaut, tandis que curl fait les deux sauf configuration contraire.
R : Fetch est intégré aux navigateurs modernes mais nécessite plus de code standard pour la gestion des erreurs et n'analyse pas automatiquement les réponses JSON. Axios est une bibliothèque qui fournit une API plus riche en fonctionnalités avec analyse JSON automatique, meilleure gestion des erreurs, interception des requêtes/réponses et annulation de requête intégrée. Axios fonctionne également de manière cohérente dans les environnements navigateurs et Node.js.
R : Les restrictions CORS (Cross-Origin Resource Sharing) s'appliquent au JavaScript basé sur le navigateur mais pas à curl. Lors de la conversion de commandes curl en JavaScript, vous pouvez rencontrer des erreurs CORS si le serveur n'inclut pas les en-têtes CORS appropriés. Les solutions incluent : utiliser un proxy CORS, demander au propriétaire de l'API d'activer les en-têtes CORS, implémenter un proxy côté serveur dans votre application, ou utiliser Node.js pour les requêtes qui ne s'exécutent pas dans le navigateur.
R : Dans le JavaScript basé sur le navigateur, vous ne pouvez pas contourner la validation du certificat SSL car c'est une fonctionnalité de sécurité imposée par les navigateurs. Dans Node.js, vous pouvez définir l'option rejectUnauthorized: false
dans la configuration de l'agent HTTPS. Cependant, cela est fortement déconseillé en production car cela compromet la sécurité. Exemple : const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});
R : Pour gérer les téléchargements de fichiers en JavaScript similaires au drapeau -F de curl, utilisez l'API FormData. Par exemple : const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData });
Cette approche fonctionne avec fetch et axios.
R : Avec l'API fetch, utilisez AbortController avec setTimeout : const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal });
Avec axios, utilisez l'option timeout : axios.get(url, { timeout: 5000 });
Les deux approches vous permettent de contrôler combien de temps attendre avant d'annuler une requête.
R : Alors que curl offre le drapeau -v/--verbose pour des informations détaillées sur les requêtes/réponses, JavaScript fournit différents outils de débogage. Dans les navigateurs, utilisez l'onglet Réseau dans les DevTools pour inspecter les requêtes, les en-têtes, les charges utiles et le timing. Pour le débogage programmatique, vous pouvez utiliser les intercepteurs axios pour enregistrer les détails des requêtes/réponses ou implémenter une journalisation personnalisée avec fetch. Dans Node.js, vous pouvez utiliser des bibliothèques comme 'http-debug' ou définir la variable d'environnement NODE_DEBUG=http.
Comprendre les commandes curl est essentiel pour des tests d'API efficaces avec JavaScript. Voici une référence rapide des options curl courantes que notre convertisseur prend en charge :
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 connectionNotre convertisseur JavaScript gère des commandes curl complexes, y compris plusieurs en-têtes, l'authentification, les charges utiles de données et diverses options. Il suffit de coller votre commande curl et d'obtenir un code JavaScript propre et moderne utilisant soit l'API Fetch, soit Axios.
Lorsque vous travaillez avec l'API Fetch de JavaScript ou Axios, suivez ces meilleures pratiques pour des interactions API efficaces et sécurisées :
// 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; }