cURL a Swift
Pega un comando curl y obtén código Swift que hace la misma petición con URLSession.
cURL a Swift analiza tu comando en el navegador. Los tokens y credenciales del comando no salen de tu dispositivo.
Probar el cliente de API
Acerca de cURL a Swift
La documentación de las API habla curl y las apps de iOS hablan URLSession, y traducir entre ambos a mano es trabajo repetitivo que invita a pequeños errores: una cabecera olvidada, un cuerpo dejado como cadena cuando debía ser JSON, una opción de autenticación ignorada en silencio. Este conversor analiza el comando curl como lo hace el propio curl, incluidas las opciones que cambian el método o pliegan credenciales en una cabecera, y genera Swift que solo usa Foundation. Un cuerpo JSON se convierte en un diccionario de Swift pasado por JSONSerialization en vez de una cadena opaca, así que sigue siendo legible y fácil de editar.
Características
- Analiza -X, -H, -d, --data-raw, --json, -u, -b, -A, -e y -G como lo hace curl
- Genera código URLSession que no necesita nada más allá de Foundation
- Cuerpos JSON representados como diccionario de Swift y codificados con JSONSerialization
- Autenticación básica reconstruida a partir de las credenciales, con base64EncodedString
- Método deducido de la presencia de un cuerpo, o tomado de -X
- Avisa de las opciones de curl sin equivalente razonable en Swift
- Copia el código o descárgalo como archivo .swift
Cómo usar cURL a Swift
- Pega el comando curl, con sus opciones y su cuerpo
- Lee el Swift generado a la derecha
- Revisa los avisos por si alguna opción no se ha podido traducir
- Copia el código o descárgalo como archivo .swift
Ejemplo
Entrada
curl https://api.example.com/users -H 'Content-Type: application/json' -d '{"name":"Ada"}'
Salida
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
El método se deduce del cuerpo, exactamente como lo deduciría curl.
Errores comunes y solución de problemas
- La petición funciona en curl pero falla en la app. — Comprueba App Transport Security. iOS bloquea HTTP en claro por defecto, así que un extremo http:// que curl alcanza sin problema necesita una excepción en el Info.plist o una URL https.
- El código compila pero no imprime nada. — URLSession es asíncrono. En una herramienta de línea de comandos el proceso termina antes de que se ejecute el bloque de finalización: mantén vivo el run loop o pasa a la forma async/await de data(for:).
- Se ha ignorado una opción -k o --insecure. — De forma deliberada. Saltarse la validación del certificado requiere un URLSessionDelegate y es una decisión que conviene tomar de forma explícita.
- Los caracteres especiales del cuerpo salen mal. — Revisa el entrecomillado del comando original. Un cuerpo entre comillas dobles ya ha pasado por tu shell, así que lo que este expandiera queda fijado en lo que recibió curl.
Preguntas frecuentes
- ¿El Swift generado funciona en iOS, macOS y Linux?
- Sí. Usa URLSession de Foundation, disponible en las plataformas de Apple y en swift-corelibs-foundation en Linux, así que el mismo archivo compila también en un proyecto de servidor.
- ¿Puedo obtener código con async/await en vez de un bloque?
- La forma generada usa una tarea de datos con bloque de finalización, que funciona en todas partes. Cambiarla por `let (data, response) = try await URLSession.shared.data(for: request)` es una sola línea.
- ¿Cómo se maneja un cuerpo JSON?
- Se analiza y se representa como diccionario [String: Any] de Swift, y después se codifica con JSONSerialization. Así la carga útil sigue siendo legible y puedes editar valores sin tocar una cadena escapada.
- ¿Qué pasa con las cookies de una opción -b?
- Se convierten en una cabecera Cookie de la petición. Ten en cuenta que URLSession tiene su propio almacenamiento de cookies, que puede añadir o sobrescribir salvo que configures la sesión de otro modo.
- ¿Se sube mi comando curl al convertirlo a Swift?
- No. El comando se analiza y el código se genera en tu navegador, algo que importa porque los comandos curl de la documentación y de los registros contienen a menudo claves de API reales.
Herramientas relacionadas
- cURL a Fetch — Convierte un comando curl en una llamada fetch() de JavaScript.
- curl a Python — Convierte un comando curl en un script de Python con requests.
- curl a Node.js — Convierte un comando curl en código de Node.js con axios.
- cURL a Java — Convierte un comando curl en código Java con HttpClient.
- cURL a Dart — Convierte un comando curl en código Dart con package:http.
- Cliente de API — Envía peticiones HTTP, crea cabeceras y parámetros e inspecciona respuestas; guarda tus últimas 25.
Todas las herramientas de ArrayKit