3 puntos por GN⁺ 2024-01-30 | 1 comentarios | Compartir por WhatsApp

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 --libcurl genera 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 archivo example.c en 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

 
GN⁺ 2024-01-30
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.

    • Los usuarios de R pueden convertir un comando “copy as curl” en código de solicitud con la función curl_translate del paquete httr2, una reescritura reciente de httr.
      https://httr2.r-lib.org/reference/curl_translate.html
    • curlconverter.com se ve tan bueno que merece ir directo a marcadores.
      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.
    • Se volvió mucho más fácil resolver problemas con endpoints de API.
      Puedes cambiar los parámetros de la solicitud y enviarla a una instancia local, o pasarla por pipe a jq para ajustar el formato de salida.
    • Es una observación muy acertada que, cuando un endpoint no funciona, el primer paso sea “¿funciona con curl?”.
    • HTTP en sí no necesita una representación intermedia, pero por la universalidad de cURL en la práctica termina funcionando así.
      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.

    • También es excelente como documentación de una biblioteca de programación.
      Si estás usando libcurl y 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 --libcurl para saber exactamente cómo hacerlo con la biblioteca en C.
    • Sería bueno que este enfoque también se aplicara a la configuración de Gnome, la configuración de red, las GUI de configuración de firewall y cualquier cosa que pueda accionarse mediante comandos de CLI.
  • 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.

    • Microsoft también creó una herramienta útil en un sentido parecido: permite inspeccionar la estructura de un documento específico de Office y ver el código C# que genera sus componentes.
      Parece que no se ha actualizado desde hace mucho: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
    • Probablemente haya un patrón generalizado para este tipo de cosas.
      También viene a la mente AREXX de Amiga.
    • También recuerda de forma parecida al XAML/UI paralelo del lado de Excel que se veía en el editor WPF de Visual Studio.
  • Para compilar, hay que indicarle a gcc que enlace con libcurl, por ejemplo agregando -lcurl.
    Por ejemplo, si ejecutas curl https://ifconfig.me --libcurl ip_fetcher.c para obtener la dirección IP y crear ip_fetcher.c, luego compilas con gcc -o ip_fetcher ip_fetcher.c -lcurl y 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.

    • Si prefieres make en lugar de escribir el comando cc directamente, hay una forma aún más fácil.
      Después de curl https://ifconfig.me --libcurl ip_fetcher.c, ejecuta make LDFLAGS=-lcurl ip_fetcher y 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 (—-).

    • Si envías un email al operador mediante el enlace Contact del footer, puede verlo y corregirlo.
  • ¿Esto significa que esta opción genera un programa en C compilable que puede reemplazar un script que envuelve la llamada original a curl?

    • Sí. Con libcurl ya era posible, pero hasta ahora había que escribir a mano el código repetitivo.
    • La idea es que puedas copiar y pegar el C generado en un programa existente o, como mínimo, usarlo como referencia para ver qué llamadas a la API de libcurl se necesitan para reproducir esa llamada de curl.
    • Para que sea útil en páginas web generales y casos similares, probablemente haya que modificar algunos parámetros.
      Conviene verlo como un punto de partida que evita pasar horas revisando documentación.