Debug una chiamata SOAP con netcat
24 Feb 2011Può succedere di dover debuggare una chiamata ad un servizio web esterno (nel mio caso una chiamata SOAP) effettuata attraverso un wrapper PHP; può succedere che la chiamata fallisca e il messaggio risulti veramente criptico e si necessiti di dover avere accesso all’XML effettivamente scambiato fra lo script e il server esterno, ma come fare?
Basta utilizzare ncat
come
proxy in locale con l’accortezza
di usarne un’altra istanza per ottenere effettivamente il flusso in input ed
output delle chiamate: se da un terminale si esegue
$ ncat --sh-exec "tee /tmp/stdin.txt | ncat localhost 8080 | tee /tmp/stdout.txt" -l 8888 -vvv
si crea una socket bindato alla porta 8888 che reindirizza sempre in locale
alla porta 8080, scrivendo però su file stdin.txt
e stdout.txt
rispettivamente le richieste in entrata e quelle in uscita; sulla porta 8080
mettiamo in ascolto ncat
in modalità proxy
$ ncat -l 8080 --proxy-type http -vvvv
A questo punto impostando lo script ad usare come proxy localhost
alla
porta 8888 posso ottenere il flusso di dati in entrata ed in uscita.
Update: Mi accorgo solo ora che è possibile usare una variabile trace
con la quale poter farsi restituire l’XML inviato con le librerie SOAP PHP. Poco male,
qualcosa l’ho imparato lo stesso ;-).