Agregar automáticamente una nueva línea al final del cuerpo de la respuesta curl

Resuelto Kevin Burke asked hace 12 años • 5 respuestas

Si el cuerpo de la respuesta HTTP para una solicitud curl no contiene una nueva línea final, termino con esta condición realmente molesta en la que el símbolo del shell está en el medio de la línea y el escape es lo suficientemente complicado como para que cuando coloque el último curl comando en la pantalla, eliminar caracteres de ese comando curl elimina los caracteres incorrectos.

Por ejemplo:

[root@localhost ~]# curl jsonip.com
{"ip":"10.10.10.10","about":"/about"}[root@localhost ~]#

¿Existe algún truco que pueda usar para agregar automáticamente una nueva línea al final de una respuesta curl, para que el mensaje vuelva al borde izquierdo de la pantalla?

Kevin Burke avatar Oct 12 '12 05:10 Kevin Burke
Aceptado

Del archivo man:

Para permitir que los programadores de scripts conozcan mejor el progreso de curl, se introdujo la opción -w/--write-out. Con esto, puede especificar qué información de la transferencia anterior desea extraer.

Para mostrar la cantidad de bytes descargados junto con algo de texto y una nueva línea final:

curl -w 'We downloaded %{size_download} bytes\n' www.download.com

Intente agregar lo siguiente a su ~/.curlrcarchivo:

-w "\n"
David J. avatar Jan 30 '2013 21:01 David J.

Utilizar esta:

curl jsonip.com; echo 

Si necesita agrupación para alimentar una tubería :

{ curl jsonip.com; echo; } | tee new_file_with_newline

PRODUCCIÓN

{"ip":"x.x.x.x","about":"/about"}

Así de sencillo ;)

(y no limitado al comando curl sino a todos los comandos que no terminan con una nueva línea)

Gilles Quénot avatar Oct 11 '2012 22:10 Gilles Quénot

Para obtener más información y una nueva línea limpia después del rizo.

~/.curlrc

-w "\nstatus=%{http_code} %{redirect_url} size=%{size_download} time=%{time_total} content-type=\"%{content_type}\"\n"

(Más opciones están disponibles aquí )

redirect_urlestará en blanco si la solicitud no se redirige o si utiliza -Lpara seguir la redirección.

Salida de ejemplo:

~ ➤  curl https://www.google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.uk/?gfe_rd=cr&amp;ei=FW">here</A>.
</BODY></HTML>

status=302 https://www.google.co.uk/?gfe_rd=cr&ei=FW size=262 time=0.044209 content-type="text/html; charset=UTF-8"
~ ➤  

Editar , para hacer las cosas más legibles puedes agregar colores ANSI a la -wlínea, no es tan fácil escribir directamente, pero este script puede generar un ~/.curlrcarchivo con colores.

#!/usr/bin/env python3
from pathlib import Path
import click
chunks = [
    ('status=', 'blue'),
    ('%{http_code} ', 'green'),
    ('%{redirect_url} ', 'green'),
    ('size=', 'blue'),
    ('%{size_download} ', 'green'),
    ('time=', 'blue'),
    ('%{time_total} ', 'green'),
    ('content-type=', 'blue'),
    ('\\"%{content_type}\\"', 'green'),
]
content = '-w "\\n'
for chunk, colour in chunks:
    content += click.style(chunk, fg=colour)
content += '\\n"\n'

path = (Path.home() / '.curlrc').resolve()
print('writing:\n{}to: {}'.format(content, path))
path.write_text(content)
Samuel Colvin avatar May 19 '2017 21:05 Samuel Colvin

La solución general para bash es agregar un símbolo de nueva línea en el símbolo del sistema:

Consulte la pregunta relacionada ( ¿Cómo tener una nueva línea antes del aviso de bash? ) y la respuesta correspondiente

Esta solución cubre cada comando, no solo curl.

echo $PS1 # To get your current PS1 env variable's value aka '_current_PS1_'
PS1='\n_current_PS1_'

El único efecto secundario es que aparece el símbolo del sistema después de cada segunda línea.

Dionio avatar Jul 24 '2019 11:07 Dionio