Debug una chiamata SOAP con netcat

Può 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 ;-).