Ruby Forum Rails-ES > Sockets, HTTP etc

Posted by Diego Guti (protos)
on 03.05.2008 23:18
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
Posted by Xavier Noria (fxn)
on 03.05.2008 23:43
(Received via mailing list)
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}"
Posted by Diego Guti (protos)
on 04.05.2008 20:23
Muchisimas gracias, problema resuleto ;)