Automatyczne dodawanie nowej linii na końcu ciała odpowiedzi curl

Jeśli ciało odpowiedzi HTTP dla żądania curl nie zawiera kończącego się nowego wiersza, kończę z tym naprawdę irytującym stanem, w którym znak zachęty powłoki znajduje się w środku linii, a ucieczka jest na tyle pokręcona, że kiedy umieszczę ostatnie polecenie curl na ekranie, usuwając znaki z tego polecenia curl, usuwam złe znaki.

Na przykład:

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

Czy istnieje sztuczka, której mogę użyć, aby automatycznie dodać nową linię na końcu odpowiedzi curl, aby uzyskać monit z powrotem na lewą krawędź ekranu?

 161
Author: noamtm, 2012-10-12

3 answers

Z pliku man:

Aby lepiej umożliwić programistom skryptów zapoznanie się z postępem curl, wprowadzono opcję-w / --write-out. Za pomocą tego można określić jakie informacje z poprzedniego transferu chcesz wyodrębnić.

Aby wyświetlić ilość pobranych bajtów wraz z tekstem i ending newline:

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

Więc spróbuj dodać następujący plik ~/.curlrc:

-w "\n"
 297
Author: David J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-30 21:32:43

Spróbuj:

curl jsonip.com; echo 

Wyjście

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

To jest to proste;)

(i nie ogranicza się do polecenia curl, ale wszystkich poleceń, które nie kończą się znakiem nowej linii)

 78
Author: Gilles Quenot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 01:12:24

Aby uzyskać więcej informacji, a także czystą nową linię po zwinięciu

~/.curlrc

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

(Więcej opcji dostępnych jest tutaj )

redirect_url będzie puste, jeśli żądanie nie zostanie przekierowane lub użyjesz -L, aby podążać za przekierowaniem.

Przykładowe wyjście:

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

Edit , aby było bardziej czytelne można dodać kolory ANSI do linii -w, nie jest tak łatwo pisać bezpośrednio, ale ten skrypt może wygenerować plik ~/.curlrc z kolory.

#!/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)
 6
Author: SColvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 13:44:59