|
|
| << | < | > | >> |IndiceIntroduzione XVII Tecnologia client-server vecchia scuola xvii I limiti dei browser xviii Cosa potete aspettarvi da questo libro xix Imparare dai miei errori xix Impadronirsi delle tecniche xix Sfruttare script esistenti xix Il sito web xx Il codice xxi Prerequisiti xxi Hardware xxii Software xxii Accesso a Internet xxii Esclusione di responsabilità (importante!) xxii Parte I - Concetti e tecniche fondamentali 1 Capitolo 1 - Cosa vi offre questo libro? 3 Scoprire il vero potenziale di Internet 3 Cosa offre agli sviluppatori? 4 Grande richiesta di sviluppatori di webbot 4 I webbot sono divertenti da scrivere 4 I web robot facilitano l'"hacking costruttivo" 5 Cosa offre ai manager? 5 Personalizzare Internet per la vostra azienda 5 Trarre vantaggio dall'inesperienza del pubblico con i webbot 6 Ottenere molto con un piccolo investimento 6 Considerazioni finali 6 Capitolo 2 - Alcune idee per progetti basati su web robot 7 L'ispirazione indotta dalle limitazioni dei comuni browser 7 Webbot che aggregano e filtrano le informazioni in base alla loro importanza 8 Webbot che interpretano quello che trovano 9 Webbot che agiscono per procura 9 Alcune idee folli per iniziare 10 Aiutare un dirigente impegnato 11 Risparmiare automatizzando 11 Proteggere la proprietà intellettuale 12 Ricercare opportunità 12 Controllare i diritti di accesso di un sito web 12 Creare un servizio di "ritaglio articoli online" 13 Ricostruire una mappa di reti Wi-Fi non autorizzate 13 Tracciare le tecnologie web 13 Permettere la comunicazione tra sistemi incompatibili 14 Considerazioni finali 14 Capitolo 3 - Scaricare pagine web 15 Pensare a file, non a pagine web 16 Scaricare file con le funzioni integrate di PHP 16 Scaricare file con fopen() e fgets() 17 Creazione del primo script di webbot 17 Esecuzione di un webbot da una shell (riga di comando) 18 Esecuzione di un webbot da un browser 18 Scaricare file con file() 20 Introduzione a PHP/CURL 20 Molteplici protocolli di trasferimento 20 Invio di form 21 Autenticazione Basic 21 Cookie 21 Redirection 21 Imitare gli Agent Name 22 Gestione del referer 22 Gestione dei socket 22 Installazione di PHP/CURL 23 LIB_http 23 Familiarizzare con i valori predefiniti 23 L'uso di LIB_http 24 http_get() 24 http_get_withheader() 24 Ulteriori informazioni sugli header HTTP 27 Analisi del codice sorgente di LIB_http 27 I valori predefiniti di LIB_http 27 Funzioni di LIB_http 28 Considerazioni finali 28 Capitolo 4 - Tecniche di parsing 29 Effettuare il parsing di codice HTML scritto male 29 Routine di parsing standard 30 Usare LIB_parse 30 Dividere una stringa con un separatore: split_string() 31 Estrarre il testo compreso tra due separatori: return_between() 31 Estrarre un insieme di dati per ottenere un array: parse_array() 33 Estrarre i valori degli attributi: get_attribute() 34 Rimuovere porzioni di testo non desiderate: remove() 36 Alcune funzioni PHP 36 Riconoscere una stringa contenuta in un'altra stringa 36 Sostituire una porzione di stringa con un'altra stringa 37 Rimuovere la formattazione dal testo 37 Misurare la somiglianza tra stringhe 38 Considerazioni finali 38 Non fidarsi di una pagina web fuori standard 38 Tentare il parsing a piccoli passi 39 Non formattare il testo durante il debugging 39 Prestare attenzione nell'uso delle espressioni regolari 39 Capitolo 5 - Automatizzare l'invio di form 41 Reverse engineering dei form 42 Form handler, campi dati, metodi ed event trigger 42 Form handler 43 Campi dati 44 Metodi 45 Il metodo GET 45 Il metodo POST 46 Event Trigger 47 Form imprevedibili 47 JavaScript può modificare un form appena prima dell'invio 47 Il form HTML è spesso illeggibile per le persone 48 I cookie non sono inclusi nel form, ma possono influenzare le operazioni 48 Analizzare un form 48 Considerazioni finali 52 Non farsi scoprire 52 Imitare correttamente i browser 52 Evitare errori di form 53 Capitolo 6 - Gestire grandi quantità di dati 55 [...] Parte II - Applicazioni 71 Capitolo 7 - Webbot per monitorare i prezzi 73 [...] Capitolo 8 - Webbot per catturare immagini 81 [...] Capitolo 9 - Webbot per verificare i link 89 [...] Capitolo 10 - Webbot per la navigazione anonima 97 [...] Capitolo 11 - Webbot per valutare il rank delle proprie pagine 107 [...] Capitolo 12 - Webbot di aggregazione 119 [...] Capitolo 13 - Webbot FTP 129 [...] Capitolo 14 - Webbot per NNTP News 135 [...] Capitolo 15 - Webbot per leggere e-mail 145 [...] Capitolo 16 - Webbot per inviare e-mail 153 [...] Capitolo 17 - Convertire un sito web in una funzione 163 [...] Capitolo 18 - Spider 173 [...] Capitolo 19 - Webbot che acquistano per procura 183 [...] Capitolo 20 - Webbot e crittografia 193 [...] Capitolo 21 - Autenticazione 197 [...] Capitolo 22 - Gestione automatica dei cookie 209 [...] Capitolo 23 - Pianificazione di webbot e spider 215 [...] Parte IV - Considerazioni più ampie 223 Capitolo 24 - Progettare webbot e spider che non danno nell'occhio 225 [...] Capitolo 25 - Scrivere webbot affidabili 233 [...] Capitolo 26 - Progettare siti web webbot-friendly 245 [...] Capitolo 27 - Bloccare gli spider 255 [...] Capitolo 28 - Tenere i webbot lontani dai guai 265 [...] Appendice A - Riferimenti PHP/CURL 275 [...] Appendice B - Codici di stato 285 [...] Appendice C - Indirizzi e-mail SMS 289 Indice analitico 293 |
| << | < | > | >> |Pagina xviiIntroduzioneIl giorno che conobbi per la prima volta il World Wide Web fu anche il giorno che segnò l'inizio del mio rapporto con i browser. Il primo browser che usai fu Mosaic, un'invenzione pioneristica di Eric Bina e Marc Andreessen. Lo stesso Andreessen che qualche tempo più tardi avrebbe fondato Netscape.
Nel giro di poco tempo iniziai ad associare le magie
di Internet con la semplicità del browser. Semplicemente
facendo clic su un hyperlink, potevo ammirare
i tesori del Louvre; seguendo un altro link, potevo
scoprire interessanti curiosità sulla
Famiglia Brady
(durante il mio primo approccio con il World Wide
Web incappai proprio in un fan site della
Famiglia Brady).
Il browser era molto più di una semplice
applicazione che facilitava l'utilizzo del World Wide
Web: il browser
era
il World Wide Web! In pratica una
nuova forma di televisione. Così come la televisione
permetteva di ricevere segnali video remoti con due
semplici manopole per il canale e il volume, il browser nascondeva la
complessità di Internet attraverso collegamenti
ipertestuali, preferiti
e pulsanti
indietro.
Tecnologia client-server vecchia scuola La mia più grossa scoperta fu apprendere che non avevo bisogno di un browser per visualizzare una pagina web. Realizzai che anche Telnet, un programma usato sin dagli anni Ottanta per comunicare con altri computer connessi in rete, permetteva di scaricare pagine web, come mostrato in Figura 1. Tutto a un tratto, il World Wide Web era diventato qualcosa che potevo interpretare anche senza un browser. Conoscevo già abbastanza bene le architetture client-server, in cui un semplice client permetteva l'accesso a risorse situate su un server remoto. La differenza in questo caso era che il client era il browser e il server forniva pagine web. L'unico aspetto rivoluzionario era il fatto che, a differenza delle applicazioni client-server diffuse fino a quel momento, i browser erano semplici da utilizzare per chiuque, e avrebbero ben presto avuto una diffusione di massa. Gli utenti di Internet non erano più solo laureati in fisica e programmatori, ma anche gente comune. Sfortunatamente, il grande pubblico non aveva idea di cosa fosse la tecnologia client-server, restando quindi fortemente legato ai browser. Non era affatto ovvio che esistessero anche altri modi di usare il World Wide Web.
Da programmatore, mi resi conto che se potevo usare Telnet per scaricare una
pagina web, potevo anche scrivere dei programmi ad hoc che facessero la stessa
cosa. Volendo, avrei potuto scrivere un mio browser personale, o realizzare
agenti automatici
(web robot, spider,
e
screen scraper)
per superare le limitazioni di un browser.
I limiti dei browser
I principali limiti dei browser sono conseguenza del fatto che si tratta di
strumenti manuali.
Un browser è in grado soltanto di scaricare e visualizzare siti web: tocca a voi
poi decidere se il contenuto della pagina è rilevante, se contiene informazioni
già viste altrove o se è necessario seguire un collegamento a una diversa pagina
web. La cosa peggiore è che un browser non è in grado di pensare. Non è capace
di avvisare l'utente quando accade un evento importante, e certamente non è in
grado di prevedere le azioni dell'utente, per esempio compilando automaticamente
i moduli online, facendo acquisti o scaricando file. Per svolgere questo tipo di
compiti, sono necessari gli automatismi e l'intelligenza di un webbot, o web
robot: programmi (o "agenti", nel senso di sistemi che compiono delle
azioni facendo le veci di una persona) sviluppati appositamente per navigare su
Internet e assolvere in maniera "intelligente" e automatica a determinati
compiti.
Cosa potete aspettarvi da questo libro Questo libro evidenzia le limitazioni di un normale browser e indaga su come sia possibile utilizzare dei webbot per superare queste limitazioni. Il lettore imparerà a progettare e scrivere web robot per mezzo di semplici script e progetti esemplificativi. Troverà inoltre risposte a domande più rilevanti come: • Dove trovare idee per progettare un webbot? • Come ci si può divertire con i webbot senza finire nei guai? • È possibile scrivere dei web robot robusti che lavorino senza farsi riconoscere?
• Quali sono i trucchi per scrivere webbot robusti e
fault-tolerant
che continuano a funzionare anche quando cambia il contenuto dei siti Internet?
Imparare dai miei errori
Per quasi dieci anni ho scritto webbot, spider e screen scraper di ogni
tipo, e in tutto questo tempo ho commesso molti degli errori che si potrebbero
compiere. Poiché un web robot è capace di avanzare richieste poco convenzionali
sui siti web, molti amministratori di sistema possono scambiare le richieste di
un webbot per tentativi di intrusione non autorizzata. Fortunatamente, nessuno
dei miei errori mi ha mai portato davanti a un giudice, ma alcuni di essi hanno
causato telefonate intimidatorie, e-mail di avvertimento e situazioni poco
piacevoli. Fortunatamente, posso dire di avere imparato
dai miei errori, ed è passato parecchio tempo dall'ultima volta che mi sono
trovato al cospetto di un amministratore di sistema infuriato. Potrete quindi
risparmiarvi diversi inconvenienti leggendo le mie storie e imparando dai miei
errori.
Impadronirsi delle tecniche Imparererete la tecnologia necessaria a scrivere un vario assortimento di webbot. In particolare acquisirete le competenze tecniche per: • scaricare sistematicamente il contenuto di un sito web; • decodificare siti web cifrati; • sbloccare l'accesso a pagine web che richiedono un'autenticazione; • gestire i cookie; • effettuare il parsing dei dati; • scrivere dei web spider;
• gestire le enormi quantità di dati generate dai webbot.
Sfruttare script esistenti
Questo libro usa diverse librerie di codice che semplificano la
realizzazione di webbot, spider e screen scraper. Le funzioni di queste librerie
gettano le basi per la maggior parte degli script esemplificativi usati nel
libro. Usando queste librerie risparmierete tempo perché sono in grado di
svolgere il lavoro sottostante, lasciando a voi il compito di pianificare solo
le parti di alto livello. Le librerie sono disponibili per il download sul
sito web del libro.
Il sito web Il sito web del libro (http://www.schrenk.com/nostarch/webbots) è, in sé, una fonte di risorse utili. Nei limiti del possibile, infatti, i progetti di esempio del libro usano le pagine del sito stesso come target, ovvero come risorsa a cui connettersi e su cui compiere delle azioni. Questi target costituiscono un contesto "consistente" (immutabile) per consentirvi di sviluppare le vostre competenze. È importante avere a disposizione un ambiente controllato perché, nonostante tutti gli sforzi, esiste pur sempre la possibilità che un webbot smetta di funzionare correttamente al cambiare del contenuto del sito target. Avere la certezza che il sito target non cambierà nei contenuti rende il debug un po' più semplice.
Il sito contiene anche dei link ad altri siti correlati, articoli tecnici,
recensioni di libri sull'argomento, e un'area con cui si può comunicare con
altri sviluppatori di web robot (vedi Figura 2). Sul sito sono anche reperibili
le librerie di codice usate nel libro
NOTA
Una versione, localizzata in italiano, del codice utilizzato in questo volume è
disponibile presso l'indirizzo:
http://www.apogeonline.com/libri/88-503-2658-0/scheda.
La versione ufficiale degli script presi in esame rimane comunque quella
disponibile sul sito dell'autore:
http://www.schrenk.com/nostarch/webbots.
Il codice La maggior parte degli script presentati in questo libro sono realizzati in PHP puro e semplice. Alcuni script, tuttavia, contengono una mistura di PHP e HTML, a volte nella stessa riga. In questi casi, l'uso del grassetto permette di distinguere gli script PHP dal codice HTML, come mostrato nel Listato 1. | << | < | > | >> |Pagina 41Capitolo 5
Automatizzare l'invio di form
Nel Capitolo 3 avete appreso come scaricare file da Internet. In questo capitolo imparerete come compilare i form e come inviare informazioni ai siti web. Se un webbot riesce a scambiare informazioni con un sito web, allora vuol dire che può agire al posto vostro. I webbot interattivi possono: • trasferire fondi tra i vostri conti bancari online quando il saldo di uno dei conti scende al di sotto di un certo limite; • acquistare oggetti su aste online quando l'oggetto e il suo prezzo soddisfano dei criteri prestabiliti; • inviare autonomamente file a siti web per la condivisione di foto;
• avvisare un fornitore di ricaricare un distributore
automatico quando le scorte di un prodotto sono finite.
I web robot inviano dati ai server web imitando ciò che fanno le persone, quando compilano un form HTML standard. Questo processo è detto form emulation. Il form emulation non è un compito facile, dal momento che ci sono molti modi per inviare un form. Inoltre, è fondamentale compilare form esattamente come il sito web si aspetta che siano compilati, altrimenti il server genererà un errore nei suoi file di log. Coloro che usano i browser non devono curarsi del formato dei dati che inseriscono in un form. Gli sviluppatori di webbot, invece, devono "smontare" l'interfaccia del form e studiarne il funzionamento per imparare il formato in cui il server si aspetta i dati (questo processo in generale è conosciuto come reverse engineering). Quando non si compiono errori, i dati del form inviato dal webbot appaiono esattamente come se fossero stati inviati da una persona tramite un browser. Se fatto male, il form emulation può mettere nei guai gli sviluppatori di webbot. Ciò è vero soprattutto se state creando un'applicazione che apporta un vantaggio competitivo per un cliente e volete nascondere il fatto che state usando un webbot. Se il vostro web robot si mette nei guai possono accadere una serie di cose, che vanno dalla fuga d'informazioni (ossia rivelare che state usando un webbot), al vedervi revocata l'autorizzazione da parte del proprietario del sito web su cui stavate usando il vostro webbot.
La prima regola del form emulation è rimanere nel legale. Mostratevi in
mafiera sincera, non violate l'accordo di licenza di un sito web. La seconda
regola consiste nell'inviare dati di form al server esattamente nel modo in cui
questo si aspetta di riceverli. Se i dati del form che inviate si discostano dal
formato atteso, potreste generare errori sospetti nel log del server. In quel
caso, l'amministratore del server intuirà facilmente che
state usando un webbot. Anche se il vostro webbot è legittimo, i file di log
del server che crea potrebbero non assomigliare all'attività di un browser.
Potrebbero indicare all'amministratore del sito che siete un hacker e portare al
blocco dell'indirizzo IP o alla disabilitazione del vostro account. È meglio
rimanere segreti e legali. Per queste ragioni,
forse potrebbe interessarvi la lettura dei Capitoli 24 e 28 prima di
avventurarvi da soli nel mondo dei web robot.
Reverse engineering dei form Gli sviluppatori di webbot devono guardare i form online diversamente dalle persone che utilizzano lo stesso form in un browser. Generalmente, quando una persona usa i browser per compilare form online, per esempio per pagare una bolletta o per controllare il saldo di un conto, vede vari campi che vanno selezionati o compilati. Gli sviluppatori webbot, al contrario, devono vedere i form HTML come interfacce o specifiche che dicono a un webbot in che modo un server si aspetta di vedere un form dopo che è stato inviato. Uno sviluppatore di webbot deve avere una visione dei form uguale a quella del server che deve riceverli. Per esempio, una persona che compila il form in Figura 5.1 riempirebbe una serie di elementi del form, come campi di testo, aree di testo, menu a tendina, pulsanti di scelta, caselle di controllo o elementi nascosti, che sono identificati da etichette di testo. Mentre una persona associa le descrizioni mostrate in Figura 5.1 con gli elementi del form, chi scrive webbot deve sapere che le descrizioni e i tipi degli elementi del form (testo, menu, pulsanti ecc.) sono "immateriali". Tutto ciò che il form deve fare è spedire le coppie nome/dato corrette che rappresentano questi campi alla pagina del server appropriata, con il protocollo previsto. Tutto questo non è affatto complicato come potrebbe sembrare, ma prima di procedere oltre, è importante comprendere le varie parti che compongono un form HTML. | << | < | > | >> |Pagina 171Parte III
Considerazioni tecniche avanzate
I capitoli di questa sezione esplorano gli aspetti tecnici più raffinati
dello sviluppo di webbot e spider. Nei
primi due capitoli verranno esposte delle tecniche
che si imparano durante lo sviluppo di webbot e
spider molto specializzati. Verranno descritti anche
dei metodi per sfruttare PHP/CURL per creare
webbot che gestiscano autenticazione, crittografia e cookie.
Capitolo 18: Spider
Il capitolo inzia con un'analisi di spider semplici in
grado di trovare e seguire link su specifiche pagine
web. Il discorso si estende poi alle tecniche per lo
sviluppo di spider avanzati che vagano autonomamente su Internet, cercando
informazioni specifiche e lasciando dei
payload,
ovvero eseguendo delle operazioni predefinite quando trovano i dati desiderati.
Capitolo 19: Webbot che acquistano per procura
In questo capitolo, si analizzerà la teoria di progettazione per scrivere
sniper,
ovvero webbot in grado di comprare oggetti automaticamente. Gli sniper
vengono usati principalmente sui siti di aste online,
"attaccando" quando vengono soddisfatti una serie
di criteri specifici.
Capitolo 20: Webbot e crittografia
Per i webbot che usano PHP/CURL i siti web
criptati non sono un problema. Qui si vedrà come
funzionano i certificati di crittografia online e come
PHP/CURL facilita la gestione della crittografia.
Capitolo 21: Autenticazione
In questo capitolo dedicato all'accesso ai siti autenticati (ovvero protetti
da password), verranno analizzati i vari metodi utilizzati per proteggere i siti
web da utenti non autorizzati. Si apprenderà anche come scrivere un webbot che
possa accedere automaticamente a questi siti.
Capitolo 22: Gestione automatica dei cookie
La gestione avanzata dei cookie implica la gestione delle date di scadenza
dei cookie e diversi set di cookie per diversi utenti. Si analizzeranno anche le
possibilità (e le impossibilità) di PHP/CURL di vincere queste sfide.
Capitolo 23: Pianificazione di webbot e spider Nell'ultimo capitolo di questa sezione, si analizzeranno i metodi per lanciare o eseguire periodicamente un webbot. Queste tecniche permetteranno al webbot di essere eseguito autonomamente simulando l'attività umana. | << | < | > | >> |Pagina 173Capitolo 18
Spider
Gli spider, conosciuti anche come web spider, crawler, e web walker, sono web robot specializzati che, diversamente dai webbot tradizionali che hanno target ben definiti, scaricano più pagine web da più siti. Quando uno spider vaga per Internet è difficile prevedere dove andrà o cosa troverà, poiché segue i link trovati nelle pagine scaricate in precedenza. L'imprevedibilità rende gli spider divertenti da scrivere perché agiscono come se avessero vita propria. Gli spider più famosi sono quelli usati dai più importanti motori di ricerca (Google, Yahoo! e MSN) per scoprire i contenuti online. Nonostante spider per molti sia sinonimo di motore di ricerca, il potenziale degli spider è molto più grande. È possibile scrivere uno spider che faccia tutto quello che può fare un qualsiasi webbot, con il vantaggio di avere come target l'intera rete Internet. Questo crea una nicchia per gli sviluppatori che progettano spider specializzati per fare delle operazioni molto specifiche. Ecco alcune idee per potenziali applicazioni spider. • Trovare copie originali in vendita dei fumetti di Spiderman del 1963. Progettare uno spider che invii un'e-mail con i link ai nuovi esemplari trovati o alle riduzioni di prezzo. • Generare periodicamente un archivio dei siti web dei concorrenti. • Invitare tutti i membri di MySpace che vivono a Roma a essere vostri amici. ATTENZIONE Questo esempio viene riportato qui solo per mostrare le potenzialità di uno spider. Siete pregati di non farlo. Agent automatizzati come questi violano i termini d'uso di MySpace. Sviluppate i webbot in maniera responsabile. • Inviare un messaggio di testo quando lo spider trova offerte di lavoro per un fotografo di moda che parla portoghese e vive a Miami. • Mantenere una versione aggiornata del giornale locale sul palmare. • Verificare che tutti i link di un sito web indirizzino verso pagine attive. • Eseguire un'analisi statistica dell'uso dei nomi su Internet. • Cercare su Internet musicisti che hanno inciso nuove versioni di una canzone particolare. • Acquistare una Bibbia da collezione quando lo spider ne trova una il cui prezzo è sensibilmente inferiore a quello proposto su Amazon.com.
Questa lista potrebbe andare avanti, ma quanto elencato fin qui sembra
sufficiente per avere un'idea delle potenzialità di uno spider. Per un'azienda,
uno spider ben progettato è come avere personale in più, che giustifica
ampiamente il costo di sviluppo.
Come funzionano gli spider
Gli spider cominciano a raccogliere i link dal
seed
URL (URL base), l'indirizzo della pagina web target iniziale. Lo spider usa
questi link come riferimenti all'insieme successivo di pagine da processare e,
mentre scarica tutte queste pagine, lo spider raccoglie altri link. La
prima pagina scaricata dallo spider viene detta primo livello di penetrazione.
A ogni livello di penetrazione successivo vengono scaricate altre pagine web
secondo i riferimenti dei link raccolti nel livello precedente. Lo spider ripete
questo processo finché raggiunge il livello massimo di penetrazione. La Figura
18.1 mostra un tipico processo spider.
Un esempio di spider Questo spider di esempio riutilizzerà il "raccoglitore" di immagini (descritto nel Capitolo 8) che scarica le immagini da una pagina web. Il raccoglitore di immagini è in questo caso il payload dello spider, ovvero l'operazione che lo spider eseguirà su tutte le pagine web visitate. Questo spider compie un'operazione molto utile, ma qui il suo scopo principale è dimostrare il funzionamento di uno spider, e per questo motivo la progettazione ha subìto dei compromessi che influiscono sulla fruibilità dello spider su operazioni più complesse. Dopo aver analizzato questo esempio di spider, si daranno delle indicazioni per rendere uno spider scalabile, cioè adatto anche ad applicazioni più complesse.
I Listati 18.1 e 18.2 sono gli script principali dello spider di esempio.
Inizialmente lo spider si limita a raccogliere i link. Dal momento che il
payload rende le cose più complesse, verrà aggiunto solo dopo aver compreso il
funzionamento dello spider base.
|