web-dev-qa-db-fra.com

Ajouter automatiquement une nouvelle ligne à la fin du corps de réponse curl

Si le corps de la réponse HTTP pour une requête curl ne contient pas de fin de ligne, je me retrouve avec cette situation vraiment gênante, où l'invite du shell est au milieu de la ligne, et l'échappement est suffisamment perturbé pour que je mette le dernier curl commande à l'écran, la suppression des caractères de cette commande curl supprime les mauvais caractères.

Par exemple:

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

Existe-t-il une astuce que je peux utiliser pour ajouter automatiquement une nouvelle ligne à la fin d'une réponse curl, afin de remettre l'invite sur le bord gauche de l'écran?

196
Kevin Burke

À partir du fichier man:

Afin de mieux permettre aux programmeurs de se familiariser avec les progrès de curl, l'option d'écriture -w/- a été introduite. Grâce à cela, vous pouvez spécifier les informations du transfert précédent que vous souhaitez extraire.

Pour afficher la quantité d'octets téléchargés avec du texte et une nouvelle ligne de fin:

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

Alors essayez d’ajouter ce qui suit à votre ~/.curlrc fichier:

-w "\n"
357
David J.

Essayez ça:

curl jsonip.com; echo 

SORTIE

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

C'est que simple;)

(et ne se limite pas à la commande curl mais à toutes les commandes ne se terminant pas par une nouvelle ligne)

85
Gilles Quenot

Pour plus d'informations ainsi qu'une nouvelle ligne épurée après curl

~/.curlrc

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

(Plus d'options sont disponibles ici )

redirect_url sera vide si la demande n'est pas redirigée ou si vous utilisez -L suivre la redirection.

Exemple de sortie:

~ ➤  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"
~ ➤  

Éditez , pour rendre les choses plus lisibles, vous pouvez ajouter des couleurs ANSI au -w ligne, ce n’est pas si facile d’écrire directement, mais le script this peut générer un ~/.curlrc fichier avec des couleurs.

#!/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)
12
SColvin

La solution générale pour bash consiste à ajouter un symbole de nouvelle ligne dans la commande Invite:

Voir la question connexe ( Comment avoir une nouvelle ligne avant l'invite bash? ) et la correspondance réponse

Cette solution couvre chaque commande, pas seulement curl.

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

Le seul effet secondaire est que vous obtenez une invite de commande après chaque deuxième ligne.

0
Dionio