Buenas, Hasta ahora para trabajar con sockets utilizaba simplemente la libreria 'socket', y hace poco descubrà 'net/http' que también me va muy bien. Pero cuando hago un GET con el net/http, almaceno el resultado en una variable y luego compruebo si esa variable contiene una determinada cadena, me da que no contiene esa cadena cuando estoy seguro que la contiene. Por ejemplo, tengo un index.php subido a un host, y le hago el GET a ese index, en el cual yo tengo escrito "Pagina en pruebas", al comprobar la respuesta ( if resp =~ /Pagina en pruebas/ ) Me dice que no lo contiene, pero estoy seguro que si! Por otra parte, cuando intento hacer una peticion GET mediante la libreria 'socket', siempre me da error el servidor, y no se por que: ejemplo de peticion: req= "GET ", path, " / HTTP/1.1\nHost:" , host, "\n\n" respuesta obtenida: HTTP/1.1 400 Bad Request Date: x Server: x Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>400 Bad Request</TITLE> </HEAD><BODY> <H1>Bad Request</H1> Your browser sent a request that this server could not understand.<P> The request line contained invalid characters following the protocol string.<P> <P> </BODY></HTML> Asi que no puedo solucionar el problema ( comprobar si un archivo de un host contiene una cadena o no) ni con net/http ni con sockets, he estado buscando sobre otras librerias para ello como 'httpclient' o 'http-access2' pero no las entiendo, no he ecnontrado documentacion decente para ninguna de las dos... saludos
on 03.05.2008 23:18
on 03.05.2008 23:43
2008/5/3 Diego Guti <ruby-forum-incoming@andreas-s.net>: > Pero cuando hago un GET con el net/http, almaceno el resultado en una > variable y luego compruebo si esa variable contiene una determinada > cadena, me da que no contiene esa cadena cuando estoy seguro que la > contiene. Por ejemplo, tengo un index.php subido a un host, y le hago el > GET a ese index, en el cual yo tengo escrito "Pagina en pruebas", al > comprobar la respuesta ( if resp =~ /Pagina en pruebas/ ) Me dice que no > lo contiene, pero estoy seguro que si! Si resp almacena la respuesta el cuerpo del mensaje esta en resp.body. > Por otra parte, cuando intento hacer una peticion GET mediante la > libreria 'socket', siempre me da error el servidor, y no se por que: > > ejemplo de peticion: > req= "GET ", path, " / HTTP/1.1\nHost:" , host, "\n\n" Por un lado parece que la peticion lleva dos paths entre GET y protocolo, path y "/". Por otro un socket esta en binmode, no hay conversion de lineas. En HTTP hay que separar las cabeceras con CRLF: # escrito sobre la marcha CRLF = "\r\n" req = "GET #{path} HTTP/1.1#{CRLF}Host: #{host}#{CRLF*2}"