cURL para desarrolladores .NET: guía práctica, real y profesional
Ejecuta requests como un profesional con cURL

Hey devs 👋, artículo cortito y al pie, pero muy importante: esta vez hablaré de una de esas herramientas que muchos usamos, pero de la que, por alguna razón, poco se habla. Además, he notado que se usa mucho en entornos productivos, pero en desarrollo se usa más bien poquito, así que empecemos.

¿Qué es cURL realmente?

cURL significa Client URL.

Es una herramienta de línea de comandos que permite realizar solicitudes a servidores usando múltiples protocolos HTTP/HTTPS, FTP, SMTP, etc.

Fue creado por Daniel Stenberg allá por el lejano 1997 y hoy por hoy es un estándar de facto en el desarrollo backend.

En entornos .NET modernos, es una herramienta clave para cosas como:

  • Probar endpoints
  • Simular clientes
  • Debugging
  • Verificar headers
  • Automatización de CI/CD

¿Por qué un desarrollador .NET debería dominar cURL?

Uno podría pensar: pero si existen Postman y, por último, Swagger, ¿por qué alguien elegiría cURL?

Lo que ocurre es que cURL tiene algunas ventajas sobre Postman, aquí te lo resumiré:

PostmancURL
Interfaz gráficaLínea de comandos
ManualAutomatizable
Es pesadoEs ligero
Difícil de usar en CIEs ideal para CI/CD

En proyectos .NET desplegados en Azure App Service, un VPS Linux o un contenedor de Docker, cURL es el mínimo común denominador para testear APIs, así que está más que vigente; es un estándar.

Ejemplo real: probar una Web API en ASP.NET Core

Imagina que tienes tu API corriendo:

Para probar un request GET con cURL basta con abrir una terminal o de preferencia Git Bash y ejecutar:

curl https://localhost:7084/api/products

La respuesta es:

[
  {
    "id": 1,
    "name": "string",
    "status": true
  },
  {
    "id": 2,
    "name": "string 2",
    "status": true
  },
  {
    "id": 3,
    "name": "string 3",
    "status": true
  }
]

Aquí puedes verlo en Swagger y en Git bash:

Ahora hagamos una petición POST con JSON (Caso real en .NET)

En cURL ejecutarías lo siguiente:

curl -X POST https://localhost:7084/api/products \
 -H "Content-Type: application/json" \
 -d '{"name":"raton","status":true}'

Fíjate que el JSON está envuelto en comillas simples (' ') para que la terminal no se confunda con las comillas dobles internas

Aquí tienes el resultado y fíjate cómo funcionó.

Te explico el comando:

  • -X POST le indica el método HTTP
  • -H son los headers
  • -d es el body
  • Ojo que el JSON debe escribirse bien en el sistema operativo y tener cuidado con las comillas; por ejemplo, usar CMD o Powershell podría dar algunos problemas si no sabes qué carácter usar. Por eso recomiendo usar Git Bash.
  • La barra inclinada \ no es obligatoria, se usa para legibilidad

Autenticación con JWT

Este es un escenario muy común en .NET

Si estás usando JWT Bearer token, basta con que lo añadas en tus headers así:

curl https://localhost:7084/api/products \
-H "Content-type: application/json" \
-H "Authorization: Bearer AQUI_TU_TOKEN" \
-d '{"name":"raton","status":true}'

Esto te permite verificar la expiración de los tokens, comprobar los roles, las políticas, los errores 401 o 403, etc.

Aquí un ejemplo:

Debug avanzado: Ver headers y status code

url -i https://localhost:7084/api/products

Esto incluirá status code, headers y body

url -v https://localhost:7084/api/products

Con el modo verbose, como puedes ver, se mostrarán el handshake TLS, los certificados, las redirecciones, etc. Este es el modo de ingeniería y es ideal para debugging.

Entonces en conclusión...

Como puedes notar, cURL no es sólo una herramienta vieja de consola, sino más bien un estándar de la industria, un aliado en debugging y DevOps, y aprenderlo es crítico sobre todo para especialistas en Backend en .NET y en cualquier tecnología para todo dev que quiera ser profesional en el área.

Si este artículo te ha servido, entonces compártelo, estimado dev!

Créditos de imagen de portada: Foto de byronetmedia en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *