Está en la página 1de 21

Programacin de SoftBots

Dr.FranciscoSerradillaGarca SistemasInteligentesAplicados UniversidadPolitcnicadeMadrid

FranciscoSerradilla

Arquitectura Web
URL E/Sestndar HTTP1.1 URL E.estndar

Servidor
S.estndar

CGI
Common Gateway Interface

HTML,otros

Ficheros
Cliente (usualmentenavegador)

.HTML .GIF ...

FranciscoSerradilla

Tcnicas bsicas para programar clientes Web


Recordarqueestamosenunaarquitecturacliente/ servidor RecuperacindeunapginaWeb InterrogacinaunservidorWeb Envoyrecepcindeinformacindeprotocolo
Nombredelagente Fechadeultimamodificacindelapgina Tamao
FranciscoSerradilla

Biblioteca java.net
claseURL
RepresentaunUniformResourceLocator,quepuede construirseapartirdeunString

claseURLConnection(recomendada)
PermiteestablecerunaconexinconunservidorWeby accederaloscontenidoscomosifueraunarchivodetexto Permitevariosprotocolos(HTTP,FTP,SSL,etc.)

claseSocket
Permiteestablecerenlacesdecomunicacinentre aplicacionesfueradelprotocoloHTTP,esdecir,definirun protocolopropio
FranciscoSerradilla

Otras Clases Interesantes


claseString
intindexOf(Stringstr) intindexOf(Stringstr,intfromIndex) Stringsubstring(intbeginIndex,intendIndex) Stringsubstring(intbeginIndex) Expresionesregulares:matches,replaceAll,split

claseURLEncoder(formatoxwwwurlform)
staticStringencode(Strings,Stringenc) staticStringencode(s,ISO88591)
FranciscoSerradilla

Recuperacin de una pgina Web


Stringget(Stringloc)throwsIOException{ URLurl=newURL(loc); URLConnectionconexion=url.openConnection(); BufferedReaderin=newBufferedReader( newInputStreamReader( conexion.getInputStream())); Strings,res=""; while((s=in.readLine())!=null) res+=s+"\n"; returnres; }

FranciscoSerradilla

Formularios
Cuandotenemosquepasarciertainformacinal servidorparaqueesteobtengalainformacinque queremosdebemosutilizaformularios(forms)
EsloqueseconocecomoCGI Hayqueespecificarelprogramaquerespondeala peticin Hayqueespecificarlosnombresyvaloresdelas variablesquecontendrnlainformacinaenvar Cadavariablesecorrespondeconuncampodel formulario Losnombresnosonsensiblesalcase;losvaloress
FranciscoSerradilla

Interrogacin a un servidor Web


conGET
Similaralarecuperacindeunapgina http://www.loquesea.com/cgi bin/elcgi?campo1=valor1&campo2=valor2... Losvaloresdebenirenelformatoxwwwform urlencoded(clasesURLEncoderyURLDecoder)

conPOST
Lainformacindecamposyvaloresseenvapor entrada/salidaestndar Seguidamenteserecibelarespuestademodosimilar aunGET
FranciscoSerradilla

Interrogacin a un servidor Web (II)


Stringpost(Stringloc,Stringquery)throwsIOException { URLurl=newURL(loc); URLConnectionconexion=url.openConnection(); conexion.setDoOutput(true); DataOutputStreamout= newDataOutputStream(conexion.getOutputStream()); out.writeBytes(query); out.close(); BufferedReaderin= newBufferedReader(newInputStreamReader( conexion.getInputStream())); Strings,res=""; while((s=in.readLine())!=null) res+=s+"\n"; returnres; }
FranciscoSerradilla

Cmo obtener los campos


<formaction=[direccindelCGI]method=[getopost] ></form>
elordeneslibre,losvalorespuedenonoirentrecomillas hayquepasarladireccindelCGIaabsoluta sinoseespecificamethod,esget

Campos
entrelostags<form>y</form>podemosencontrar diferentesespecificacionesdecampos estoscampostendrnunaaparienciafsica,unnombrey unvalor,ysernenviadosalservidor,ydestealCGI, alpulsarelbotnenviar
FranciscoSerradilla

Campos text, password y hidden


Tiposdecamposinput typeindicaeltipodecampoinput hayquefijarseenname,quedaelnombredela variable,yvalue,quedaelvalor loqueseenvaalCGIesname=value <INPUTTYPE=textNAME=usuario> esteeseltipopordefectosinoseespecificatype <INPUTTYPE=passwordNAME=clave> <INPUTTYPE=hiddenNAME=idiomaVALUE=xxx>
FranciscoSerradilla

Campos checkbox
<INPUTTYPE=checkboxNAME="baseball" VALUE="YCHECKED>Baseball<BR> <INPUTTYPE=checkboxNAME="basketball" VALUE="Y">Basketball<BR> <INPUTTYPE=checkboxNAME="football" VALUE="Y"CHECKED>Football<BR> <INPUTTYPE=checkboxNAME="hockey" VALUE="Y">Hockey<BR> <INPUTTYPE=checkboxNAME="soccer" VALUE="Y">Soccer

seenviarantantosparesname=valuecomochecks hayaactivos
http://www.webcom.com/cgibin/form? baseball=Y&football=Y
FranciscoSerradilla

Campos radio
<BR><INPUTTYPE="radio"NAME="sport"VALUE="soccer"CHECKED>Soccer <BR><INPUTTYPE="radio"NAME="sport"VALUE="baseball">Baseball <BR><INPUTTYPE="radio"NAME="sport"VALUE="basketball">Basketball <BR><INPUTTYPE="radio"NAME="sport"VALUE="football">Football <BR><INPUTTYPE="radio"NAME="sport"VALUE="hockey">Hockey

seenvaunniconame=value,eldelaopcin elegida
http://www.webcom.com/cgibin/form?sport=football
FranciscoSerradilla

Campos select
<SELECTNAME=platforms> <OPTION>Windows <OPTION>Macintosh <OPTION>UNIX </SELECT> <SELECTNAME=todaySIZE=5> <OPTIONVALUE=drink>DrinkExpresso <OPTIONVALUE=readSELECTED>ReadABook <OPTIONVALUE=walk>TakeAStroll <OPTIONVALUE=talk>TalkWithFriends <OPTIONVALUE=eat>EatABagel <OPTIONVALUE=veg>WatchTV <OPTIONVALUE="PigOut">MunchTeddy Grahams </SELECT>

seenvaunniconame=value,eldelaopcinelegida
elvaluedependedelformatoutilizado http://www.webcom.com/cgibin/form?platforms=Windows
FranciscoSerradilla

Campos textarea
<TEXTAREANAME="feedback"ROWS=20 COLS=60></TEXTAREA>
seenvaname=valueigualqueenuntext

submityreset
nohayqueconsiderarlos,yaquenosuelenutilizarse porelCGI(salvoqueunmismoformtengavarios botones)

IMPORTANTE!Recordarquelasvariablesysus valoresdebenircodificadosenelformatoxwwwurl form,peronoel=


FranciscoSerradilla

Ejemplo (I)

FranciscoSerradilla

Ejemplo (II)
<formmethod=POSTaction="/cgibin/search.cgi"> <tableborder=0cellpadding=4cellspacing=0BGCOLOR="#FFFFCC"> <tr> <td><inputtype=textname="terms"size=48> <td><inputtype=submitvalue="Buscar"> </tr> <tr> <td><b>Concatenaci&oacute;n:</b> <selectname="boolean"> <option>AND <option>OR </select> <b>May&uacute;sculas:</b> <selectname="case"> <option>Nosensible <option>Sensible <td></select> <br></tr> </table> </form>

FranciscoSerradilla

Informacin del protocolo HTTP


Envodeinformacinalservidor
publicvoidsetRequestProperty(Stringkey, Stringvalue)

UserAgent,Referer,Cookie RFC2616(RequestForComments)

Recepcindeinformacindelservidor
fechademodificacin,tamao,SetCookie
publiclonggetDate() publicintgetContentLength() publicStringgetHeaderField(Stringname) conname=SetCookie
FranciscoSerradilla

Construccin de un robot
Alascapacidadespararecuperarpginasy consultarformularioshemosdeaadir
Iteracinsobrelinks
visitartodaslaspginasdeundominio

Verificacinpginas
stringmatching contenidosemnticolatente

Extraccininformacin
delimitadores comparacindepginasparadeterminarqueslo relevante
FranciscoSerradilla

Iteracin sobre links


Extraccindeloshiperlinksdeunapgina
campos<ahref=hiperlink> campos<frame...src=hiperlink> campos<basehref=> extensionesdearchivos(.htm.html) otrasextensionespuedeninteresar(.gif.zip...)

Pasodelinksaabsolutos
constructorURL(URLcontext,Stringspec)

Recursinsobreloshiperlinks
FranciscoSerradilla

Guidelines for Robot Writers


Normasdebuenaprcticaparalosrobots(MartijnKoster,1993) Reconsiderar Serresponsable(identificarse,estarpresente) Probarlolocalmente Noacapararrecursos Acompaarlo(saberloqueesthaciendo,mantenerel control) Compartirlosresultados Referencias http://www.robotstxt.org/wc/guidelines.html http://www.robotstxt.org/wc/robots.html
FranciscoSerradilla