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?
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"
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)
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&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)
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