La biblioteca 'libcurl'
(everything.curl.dev)Usar --libcurl
- Se recomienda usar libcurl: Se recomienda que los usuarios primero prueben la transferencia deseada con la herramienta de línea de comandos curl y, cuando funcione aproximadamente como quieren, la vuelvan a ejecutar agregando la opción
--libcurl [nombre_de_archivo]en la línea de comandos. - Generación de código: La opción de línea de comandos
--libcurlgenera un programa en C con el nombre de archivo proporcionado. Este programa en C usa libcurl para ejecutar la transferencia que realizó la herramienta de línea de comandos curl. - Excepciones y diferencias: No siempre coincide al 100%, pero puede servir como una excelente inspiración sobre las opciones de libcurl y los argumentos adicionales que se quieran usar.
Código de ejemplo
- Ejemplo de ejecución: Si se ejecuta el comando
curl http://example.com --libcurl example.c, se genera el archivoexample.cen el directorio actual. - Código generado: El código generado incluye varias configuraciones de opciones usando
curl_easy_setopt(), y algunas opciones no se pueden generar fácilmente desde la fuente, por lo que el usuario quizá deba implementarlas por su cuenta o no usarlas.
La opinión de GN⁺
- Utilidad de libcurl: Esta función permite a los desarrolladores convertir fácilmente en un programa en C los comandos de curl que funcionan en la línea de comandos, acelerando el desarrollo de aplicaciones que usan libcurl.
- Ventajas de la generación de código: El código generado automáticamente puede ayudar a los desarrolladores a entender y aplicar más rápido la API de libcurl.
- Valor como herramienta de aprendizaje: Puede ser un buen material de aprendizaje para ingenieros de software principiantes, ya que muestra opciones de libcurl y casos reales de aplicación en programación de redes.
1 comentarios
Opiniones de Hacker News
El patrón de buscar la solicitud que quieres en la pestaña Network de las herramientas de desarrollo del navegador, copiarla con “copy as curl” y luego convertirla al código de solicitud del lenguaje que usas con una herramienta como https://curlconverter.com/ es muy bueno.
En cierto sentido, curl se usa como una representación intermedia que se puede traducir a cualquier lado.
curl_translatedel paquete httr2, una reescritura reciente de httr.https://httr2.r-lib.org/reference/curl_translate.html
El “copy as curl” del navegador ya viene en un estado donde la autenticación y los encabezados de codificación funcionan de forma confiable, así que es mucho más cómodo que estar ajustando a mano un comando curl de varias líneas.
Puedes cambiar los parámetros de la solicitud y enviarla a una instancia local, o pasarla por pipe a
jqpara ajustar el formato de salida.Como se usa tanto, aparecen herramientas que exportan solicitudes a cURL y también herramientas que importan cURL.
Que una interfaz de línea de comandos tenga una bandera que escupa el código fuente de programa que hace lo mismo que el comando actual es bastante genial.
Se siente como abrir el capó para ver qué ocurre por dentro; no solo ayuda a entender mejor el comportamiento, sino que también facilita modificarlo o extenderlo según las necesidades.
Si estás usando
libcurly de pronto necesitas algo como solicitudes por rango, o si hiciste “copy as curl” desde la pestaña Network del navegador, puedes ejecutarlo en la línea de comandos y agregar--libcurlpara saber exactamente cómo hacerlo con la biblioteca en C.Este enfoque fue una de las razones del éxito de las macros de Visual Basic de Microsoft Office.
Podías realizar una acción en Word o Excel, ver la macro generada y luego ajustar el código a tus necesidades. Es un concepto simple pero potente, así que da gusto verlo también en curl.
Parece que no se ha actualizado desde hace mucho: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
También viene a la mente AREXX de Amiga.
Para compilar, hay que indicarle a
gccque enlace con libcurl, por ejemplo agregando-lcurl.Por ejemplo, si ejecutas
curl https://ifconfig.me --libcurl ip_fetcher.cpara obtener la dirección IP y crearip_fetcher.c, luego compilas congcc -o ip_fetcher ip_fetcher.c -lcurly ejecutas./ip_fetcher, se imprimirá la dirección IP.Para quienes no usan C todos los días, incluso este paso básico de enlace es información útil.
makeen lugar de escribir el comandoccdirectamente, hay una forma aún más fácil.Después de
curl https://ifconfig.me --libcurl ip_fetcher.c, ejecutamake LDFLAGS=-lcurl ip_fetchery luego./ip_fetcher.Haciendo un poco de promoción: Hurl es una CLI open source que usa libcurl para ejecutar y probar solicitudes HTTP en texto plano.
Aprovecha la alta confiabilidad de libcurl y funciones como HTTP/3, y suma capacidades como encadenar solicitudes, capturar datos de una respuesta y pasarlos a la siguiente solicitud, y probar respuestas con JSONPath o XPath.
También tiene azúcar sintáctica para solicitudes a API REST/SOAP/GraphQL, pero el núcleo es simplemente libcurl; con la opción verbose también se pueden buscar comandos curl con grep. Participo como maintainer.
https://hurl.dev
Sería bueno que algo así también fuera posible en ffmpeg.
Daniel Stenberg cuida muchísimo los detalles y la experiencia de desarrolladores y usuarios.
Este nivel de pulido es sorprendente.
Recuerdo que el propio Daniel Stenberg mencionó esta opción en un video de 3 horas donde repasa la mayoría de las opciones de línea de comandos de curl.
https://www.youtube.com/watch?v=V5vZWHP-RqU
El título del envío debería usar dos guiones (
--), no una combinación de raya y guion de ancho completo (—-).¿Esto significa que esta opción genera un programa en C compilable que puede reemplazar un script que envuelve la llamada original a curl?
libcurlya era posible, pero hasta ahora había que escribir a mano el código repetitivo.Conviene verlo como un punto de partida que evita pasar horas revisando documentación.