Quali programmi sono necessari:
Sniffer per analizzare le pagine:
Httpfox (estensione per firefox)Editor di testo:
Notepad++Cos'è un xml?
WikipediaSvolgimento:
Per iniziare prendiamo un servizio semplice da analizzare, ad esempio SmsBG
Questo è il service già completo
<service id="42" service_type="free" name="SmsBG" v="1.0" maxsms="10" singlelen="160" sms_divisor="160" maxlen="160" reset="daily" output_encoding="UTF-8" icon="iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABMklEQVR4nMWToW7DMBRFTyqDBwoCBgIG+gmBBQMmkyKVFAz0swqqgX2BQYBBh0YKCqopGijqBwwEFAQ+YM0DmbNWG+kKZsl6wPfe9+61ncUYuWaNrmIDBuD55flPY8zuZ1m2fd1GAkxuJxe1PRwOyFgwIsJut2M6nV7U3a899s4yIkBZlnjvzwCq+msFcLWjLEs0aB9inudYa3G1G0Aigqqe1USuqoo8zyGkWwi9SFVVP0RO60Ae92QNykjD92hiBDGCX5/bSZ4T5hRvxAgYaI8tm82GxcOCrutwtaO4KYD+LHV2tcNa+/UAIGvemqhBad9b5vP5oN4eW7quI2WUxAC89xRF0Vtr9k1cPa5i+AgX7dXTKjb7JpoU0HK5HMIa0g86eD69CVUF04eb/ftnulrgE5AOtl9/G9KxAAAAAElFTkSuQmCC">
<description>
<info>Invia SMS verso numeri di cellulare bulgari Mtel.</info>
<config>
<required n="1" name="usr" default="" desc="inserisci qualsiasi cosa" />
</config>
</description>
<procedure>
<page method="POST" uri="http://smsbg.net/sms.php">
<vars>
<var name="MN1" value="359" />
<var name="MN2" value="%%pref%%" />
<var name="MN3" value="%%num%%" />
<var name="ID" value="1" />
<var name="FROM" value="" />
<var name="SM" value="%%message%%" />
<var name="num" value="142" />
<var name="sbm" value="Ã?çïðà ùà ÃÃ¥" />
</vars>
<accept>
<var acceptstr=".: smsbg.net :. send free SMS" />
</accept>
</page>
</procedure>
</service>
Iniziamo analizzando la prima riga
<service id="42" service_type="free" name="SmsBG" v="1.0" maxsms="10" singlelen="160" sms_divisor="160" maxlen="160" reset="daily" output_encoding="UTF-8" icon="iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABMklEQVR4nMWToW7DMBRFTyqDBwoCBgIG+gmBBQMmkyKVFAz0swqqgX2BQYBBh0YKCqopGijqBwwEFAQ+YM0DmbNWG+kKZsl6wPfe9+61ncUYuWaNrmIDBuD55flPY8zuZ1m2fd1GAkxuJxe1PRwOyFgwIsJut2M6nV7U3a899s4yIkBZlnjvzwCq+msFcLWjLEs0aB9inudYa3G1G0Aigqqe1USuqoo8zyGkWwi9SFVVP0RO60Ae92QNykjD92hiBDGCX5/bSZ4T5hRvxAgYaI8tm82GxcOCrutwtaO4KYD+LHV2tcNa+/UAIGvemqhBad9b5vP5oN4eW7quI2WUxAC89xRF0Vtr9k1cPa5i+AgX7dXTKjb7JpoU0HK5HMIa0g86eD69CVUF04eb/ftnulrgE5AOtl9/G9KxAAAAAElFTkSuQmCC">
I campi più importanti:
service id = Il valore dopo service id serve per identificare il numero del servizio, può essere uno qualsiasi, l'importante è che non ci siano 2 servizi con lo stesso numero nel file xml.
name = è il nome che si vuole dare al servizio, in questo caso SmsBG.
v = versione del servizio.
singlelen = lunghezza massima di un singolo messaggio, questo valore va cambiato a seconda di quanti caratteri si possono inviare tramite il servizio, in questo caso il sito SmsBG permette di inviare sms con 160 caratteri.
sms_divisor = nel caso di servizi che consentono l'invio di più di 160 caratteri bisogna indicare ogni quanti caratteri il messaggio viene spezzettato alla ricezione, non è il caso di smsbg, ma ad esempio nel service di o2 che ha un limite di 1000 caratteri il messaggio viene spezzettato ogni 152 caratteri se supera la lunghezza totale di 160.
maxlen = lunghezza massima del messaggio, questo parametro va cambiato a seconda di quanti caratteri si possono inviare tramite il sito scelto per l'invio.
output_encoding = questo parametro può essere configurato a seconda della codifica utilizzata dal sito scelto per l'invio degli sms.
icon = può anche essere lasciato vuoto, è l'icona del servizio.
Secondo passo, descrizione del servizio
<description>
<info>Invia SMS verso numeri di cellulare bulgari Mtel.</info>
<config>
<required n="1" name="usr" default="" desc="inserisci qualsiasi cosa" />
</config>
</description>
Campo info
<info>Invia SMS verso numeri di cellulare bulgari Mtel.</info>
tra <info> ed </info> bisogna inserire una breve descrizione del servizio
Tag config
<config>
<required n="1" name="usr" default="" desc="inserisci qualsiasi cosa" />
</config>
In questo caso il servizio è senza registrazione, quindi andremo ad inserire questo campo anche se superfluo. Il caso di un servizio con registrazione lo tratteremo più avanti.
required = significa che quel campo è necessario da compilare ai fini dell'invio, almeno un campo deve essere required, in alternativa si può inserire "optional" se quel campo non è necessario
n = è il numero del campo
nome = è il nome della variabile che si vuole assegnare a quel campo, vedremo più avanti a cosa serve
desc = lì bisogna inserire la descrizione del campo
Terza parte, procedura di invio, la parte più importante:
<procedure>
<page method="POST" uri="http://smsbg.net/sms.php">
<vars>
<var name="MN1" value="359" />
<var name="MN2" value="%%pref%%" />
<var name="MN3" value="%%num%%" />
<var name="ID" value="1" />
<var name="FROM" value="" />
<var name="SM" value="%%message%%" />
<var name="num" value="142" />
<var name="sbm" value="Ã?çïðà ùà ÃÃ¥" />
</vars>
<accept>
<var acceptstr=".: smsbg.net :. send free SMS" />
</accept>
</page>
</procedure>
per poter compilare questa parte c'è bisogno di utilizzare lo sniffer.
1) Per chi è alle prime armi consiglio di chiudere tutte le schede aperte e lasciare solamente il sito web che si intende analizzare aperto in modo da non confodersi
2)Recarsi sul sito web che permette l'invio, in questo esempio
www.smsbg.net3)Aprire lo sniffer ed avviarlo
4)Compilare i campi ed effettuare un invio, in questo caso li compiliamo così
5)Dopo aver cliccato su invia attendere il caricamento della pagina successiva e poi stoppare lo sniffer. Si presenterà una situazione di questo tipo:
A)Cercare i POST in quanto sono quelli che ci interessano perchè sono le azioni dove vengono inviati dei dati alla pagina
B)Copiare l'url di quel post, in quel caso è
http://smsbg.net/sms.php e compilare la riga di conseguenza:
<page method="POST" uri="http://smsbg.net/sms.php">
C)Cliccare su POST Data, lì ci saranno le nostre variabili
D)Tra i due <vars> vanno inserite le variabili, ad esempio
<var name="MN1" value="359" />
var name = indica il nome della variabile che è scritto nella colonna Parameter ed è sempre dato dal sito
value = indica il valore scritto nella casella value, in questo caso può essere sia fisso che variabile, ad esempio 359 era fisso già dato dal sito, mentre ad esempio potrebbe verificarsi:
<var name="MN2" value="%%pref%%" />
In questo caso sotto MN2 ci compare 444 perchè è un dato che abbiamo inserito noi, e sta a significare il prefiso ad esempio 328 - 338 - 347 - 392 ecc. Pertanto bisognerà compilare il campo con delle variabili prestabilite da utilizzare a seconda di cosa viene inserito:
Si utilizzano:
%%intpref%% = per il prefisso internazionale (incluso il +)
%%intcode%% =per il prefisso internazionale (escluso il +)
%%pref%% = per il prefisso (328 - 338 - 347 - 392 ecc)
%%num%% = per il numero senza prefisso
%%intnum%% = per il numero compreso il prefisso (ma senza il prefisso internazionale)
%%message%% = per il testo del messaggio
Tutte le variabili devono essere prese in considerazione, ma non è detto che tutte siano indispensabili per l'invio, l'importante è inserirle e nel caso di variabili non indispensabili si può anche attribuire loro un valore casuale.
Conferma di invio del messaggio, accept string
<accept>
<var acceptstr=".: smsbg.net :. send free SMS" />
</accept>
Dopo var acceptstr va inserita una parte di testo che compare nella pagina successiva all'invio che ci possa far capire che l'sms è stato correttamente inviato, in questo caso ne abbiamo una conferma certa in quanto non compare scritto da nessuna parte qualcosa come "Sms inviato" o simili, dunque quando si invia non ci resta che sperare che tutto sia andato per il meglio. In quasi tutti i servizi comunque c'è una pagina che conferma il corretto invio del messaggio.
Nel caso si volesse invece resituire un messaggio di errore qualora l'sms non venga correttamente inviato si può aggiungere sotto </accept> e prima di </page> il tag <errors>, ad esempio
<errors>
<var errstr="Problem sending message" errmsg="Errore nell'invio" />
<var errstr="Service is currently unavailable" errmsg="Il servizio non e' al momento disponibile" />
<var errstr="maintenance" errmsg="Il sito e' in manutenzione,riprova piu' tardi" />
</errors>
Dopo var errstr bisogna indicare il testo contenuto nella pagina caricata dopo l'invio che ci permette di capire che l'invio è fallito, in errmsg si scrive l'errore che si vuole venga restituito nel caso in cui venga trovato quel testo nella pagina.
Si andranno poi a chiudere i tag rimanenti e il servizio sarà così completato!
In caso di servizio che preveda il login basta aggiungere qualche semplice variabile. Nella parte config dobbiamo inserire la possibilità di configurare nome utente e password in questo modo:
<config>
<required n="1" name="user" default="" desc="inserisci la username" />
<required n="2" name="password" default="" desc="inserisci la password" />
</config>
"user" e "password" le utilizzeremo poi come variabili andando ad inserirle prima della pagina di invio così con due %% all'inizio e alla fine della variabile:
<page method="POST" uri="url della pagina di login">
<vars>
<var name="USERNAME" value="%%user%%" />
<var name="PASSWORD" value="%%password%%" />
</vars>
</page>
Nel caso di un service con il captcha bisogna inserire questo pezzo nel service in modo da far visualizzare il captcha all'applicazione:
<page uri="http://www.nome_sito.it/percorso/captcha.jpg" captcha="1"/>
e bisogna utilizzare come variabile per il captcha "%%captcha_value%%"
Nel caso in cui una variabile dovesse essere dinamica, ovvero cambiare ad ogni invio, l'indirizzo del captcha dovesse ogni volta diverso ecc. bisogna far ricorso ai content.
I content servono a prelevare una parte di testo variabile che si trova tra 2 parti di testo sempre fisse.
<contents>
<var name="__VIEWSTATE2" left="input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" right="""/>
</contents>
In questo caso la variabile VIEWSTATE2 ha un valore che cambia sempre e in quanto necessaria per l'invio bisogna recuperare il suo valore. Per farlo bisogna inserire analizzando la sorgente della pagina web una porzione di testo che è scritta prima della variabile nel campo left, mentre nel campo right bisogna inserire una stringa scritta dopo la parte di testo che ci interessa recuperare.
Ad esempio mettiamo ci interessi recuperare il valore degli sms residui dopo un invio. Sul sito viene scritto così:
Sms ancora disponibili:200:
Per recuperare il 200 che è il numero che cambia dopo ogni invio in left andrà scritto "disponibili:" e in right ":"
Questa guida è solo una base, man mano se vi cimenterete troverete cose magari semplici come sono scritte qua oppure più complesse, con questa guida spero di aiutarvi a capire come può essere scritto un service xml e da dove partire. Poi con la pratica diventerete sicuramente più esperti