Posts Tagged ‘shell’

Faire du POST/GET/HEAD en ligne de commande

Friday, January 14th, 2011

À l’heure des webservices RESTful, il est essentiel d’avoir des outils simples pour réaliser tous types de requêtes HTTP. Et l’outil indispensable c’est LWP (WWW Library for Perl), disponible sous tout système digne de ce nom (sous Debian c’est libwww-perl), qui met notamment à disposition des non-barbus les fabuleuses commandes HEAD, GET, POST. Rien de nouveau, mais l’infogérance Evolix utilisant quasi-quotidiennement ces commandes, il me paraît utile de s’assurer que ces commandes sont entre toutes les mains des développeurs avec lesquels on travaille (et des autres ;-).

Au delà de la Man Page voici quelques exemples pour vous convaincre :

$ HEAD www.evolix.fr
200 OK
Connection: close
Date: Tue, 28 Dec 2010 20:08:35 GMT
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html
Client-Date: Tue, 28 Dec 2010 20:08:44 GMT
Client-Peer: 85.31.205.43:80
Client-Response-Num: 1

$ HEAD -U -H "User-Agent: Mozilla/4.8 [en] (Windows NT 5.1; fr; rv:BlogByGcolpart)" \
 -H "Referer: http://www.evolix.fr/" www.evolix.fr/serv/infogerance.html
HEAD http://www.evolix.fr/serv/infogerance.html
Referer: http://www.evolix.fr/
User-Agent: Mozilla/4.8 [en] (Windows NT 5.1; fr; rv:BlogByGcolpart)

200 OK
Connection: close
Date: Thu, 13 Jan 2011 23:14:13 GMT
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html
Client-Date: Thu, 13 Jan 2011 23:14:13 GMT
Client-Peer: 85.31.205.43:80
Client-Response-Num: 1

$ GET http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.2.tar.bz2 > linux-2.6.36.2.tar.bz2

$ GET google.fr | grep charset= | sed 's@^.*charset=\([-a-Z0-9]*\)".*$@\1@'
ISO-8859-1

$ POST http://www.evolix.fr/contacts.html
Please enter content (application/x-www-form-urlencoded) to be POSTed:
from=jdoe%40example.com&contenu=Coucou&validation=nospam&soumettre=ok
Ctrl+d

$ echo -n "from=jdoe%40example.com&contenu=Coucou&validation=nospam&soumettre=ok" > /tmp/POST-DATA.txt
$ POST http://www.evolix.fr/contacts.html < /tmp/POST-DATA.txt

Note : Attention, pour envoyer interactivement des données en POST, il faut ensuite les valider avec Ctrl+d

Capture input/output of a process with gdb

Tuesday, September 14th, 2010

My tip of day. When you lose control of a process (for example with a process launched with disown or, another example, when you close your SSH terminal with “unsynced” mutt), thanks gdb.

$ tty
/dev/pts/13
$ gdb --pid=`pidof mutt`
(gdb) call close(0)
(gdb) call close(1)
(gdb) call close(2)
(gdb) call open("/dev/pts/13", 2, 0)
(gdb) call dup(0)
(gdb) call dup(0)
(gdb) detach
Detaching from program: /usr/bin/mutt-org, process 2932

Thanks to this comment on superuser.com for the original idea.

Edit: correction on dup() calls. Thanks to Peter Pentchev for his explanation in comments.