Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 1 votos - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Sistemas Operativos] Ayuda con HTTP
Autor Mensaje
malla31_3 Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 5
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Sep 2010
Mensaje: #1
[Sistemas Operativos] Ayuda con HTTP Trabajo practico Sistemas Operativos
Buenas estoy con algo q me traba un poco en el desarrollo del TP,
me piden que por me registre siendo el cliente en el web server que ya lo
hice y le mande un mensaje al web server con un Post de HTTP,
mi duda es q no se como hacerlo en C no entiendo como tratarlo, si tengo
que usar string o una estructura o que hacer estoy re perdido con esto,
si alguien tiene un ejemplo de codigo mas o menos explicado me vendria joya
Gracias, espero respuestas.
(Este mensaje fue modificado por última vez en: 26-11-2010 11:16 por pablo.)
21-09-2010 01:13
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Imakuni Sin conexión
Presidente del CEIT
Did you know that cashews come...
********

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 6.967
Agradecimientos dados: 112
Agradecimientos: 119 en 77 posts
Registro en: Jul 2008
Mensaje: #2
RE: SO - Ayuda con HTTP
Primero, tratalo como un string (osea, char *)

Una vez que tengas el string hecho, lo envias.

Supongamos que tenes un string llamado "mensajeAEnviar".


send(<Socket que declaraste antes>, mensajeAEnviar, strlen(mensajeAEnviar), 0);



En realidad, lo que le envias es un STREAM, no un STRING. Ya que cuando el "cliente" lo recibe, lo recibe SIN el '\0' que tiene todo string.

(no se si lo sabias: En C, un String es un array de Chars, el cual tiene como ultimo caracter, el '\0'. Vos cuando se lo envias al cliente, le envias TODO el mensaje MENOS el '\0' del final. strlen(mensajeAEnviar) te retorna el "largo" que tiene la cadena, sin el '\0', asique no te tenes que preocupar por nada, vos manejalo como un String siempre, y siempre que lo envies, usa "strlen(mensajeAEnviar)" y listo).

sirvio?

P.D.: Acordate que los mensajes HTTP terminan con \r\n\r\n, ejemplo de un GET: " GET /index.html HTTP/1.1 \r\n\r\n"
(Este mensaje fue modificado por última vez en: 21-09-2010 01:25 por Imakuni.)
21-09-2010 01:23
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Mati Dumrauf Sin conexión
Empleado de Fotocopiadora
Soy el Gran Saiyaman!
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 43
Agradecimientos dados: 50
Agradecimientos: 21 en 7 posts
Registro en: Sep 2010
Mensaje: #3
RE: SO - Ayuda con HTTP
Antes que nada, planteate lo siguiente.

Tenés que trabajar con dos métodos:
  1. GET. La data que se quiere "enviar"/"pedir" viaja en la url que se escriba.
    Ej:
    GET /index.html?userid=joe&password=guessme HTTP/1.1
  2. POST. La data viaja dentro del cuerpo del mensaje, y no a través de la url. Esto hace que se evite ver los datos en la url, además de que se puede enviar más información que a través de un GET.

    Ej:
    POST /foro/member.php HTTP/1.1

    Host: http://www.utnianos.com.ar
    User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; es-AR; rv:1.9.2.8) Gecko/20100723 Ubuntu/9.10 (karmic) Firefox/3.6.8
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Referer: http://www.utnianos.com.ar/foro/index.php
    Cookie: __utma=71202260.1731399378.1283831047.1284927696.1285074747.24; __utmz=71202260.1285074747.24.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=utenianos; __utmb=71202260.27.10.1285074747; __utmc=71202260; mybb_mybb[lastvisit]=1285082525; mybb_mybb[lastactive]=1285082525; mybb_sid=33357ace50675d166accc069ce623e1a

    Content-Type: application/x-www-form-urlencoded
    Content-Length: 171
    action=do_login&url=http%3A%2F%2Fwww.utnianos.com.ar%2Fforo%2Findex.php&quick_login=1&quick_username=Matias+Dumrauf&quick_password=***********&submit=Iniciar+Sesi%C3%B3n


Ahora, a nivel código: cómo lo interpretás?

Lógicamente, es una conexión por sockets. A tu servidor le van a tirar un connect cada vez que un browser se quiera conectar().

Una vez conectado (el servidor hizo un accept), cuando hagas un recv() te va a llegar toda la cabecera del mensaje. Entonces, vos tenés que parsear la cabecera (a mano, ya que no podés usar ninguna api externa) para obtener la información que a vos te interese, por ejemplo: en el caso del GET, parseo para obtener la versión del protocolo que usa el cliente y el pedido. Y a su vez, parseo el pedido para diferenciar la url que me escribieron, de la información que me llegó a través del form (es decir, despues del signo '?').

Las respuestas que le tenés que enviar al cliente HTTP tienen que ser tal y como especifica Teseracto: terminando en \r\n\r\r. Ahora, cada pedido tiene una respuesta, por ejemplo, si fue válida, se le responde con un HTTP 200 OK, con un correspondiente Content-Type. Y a continuación, el mensaje que quieras enviar. Pero siempre el mensaje de respuesta primero (puede ser un HTTP 404 NOT FOUND, un HTTP 505 INTERNAL SERVER ERROR, etc.).


Una cosa más: si querés ver los headers de las páginas, para tener ejemplos de como van viajando, podés bajar el plugin del Firefox Live HTTP Headers. Está muy bueno, me ayudó mucho. thumbup3

"No hay atajos en el camino del Ingeniero"
(Este mensaje fue modificado por última vez en: 21-09-2010 13:56 por Mati Dumrauf.)
21-09-2010 13:54
Envíale un email Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Imakuni Sin conexión
Presidente del CEIT
Did you know that cashews come...
********

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 6.967
Agradecimientos dados: 112
Agradecimientos: 119 en 77 posts
Registro en: Jul 2008
Mensaje: #4
RE: SO - Ayuda con HTTP
(ah, lei cualquiera, pense que estaba haciendo el cliente =P).
21-09-2010 14:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Mati Dumrauf Sin conexión
Empleado de Fotocopiadora
Soy el Gran Saiyaman!
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 43
Agradecimientos dados: 50
Agradecimientos: 21 en 7 posts
Registro en: Sep 2010
Mensaje: #5
RE: SO - Ayuda con HTTP
(21-09-2010 14:09)Teseracto escribió:  (ah, lei cualquiera, pense que estaba haciendo el cliente =P).

Jajaj =P como Cliente usan cualquier browser (IE, Firefox, Chrome). La única vez que hubo que implementar un cliente que utilizara el protocolo HTTP fue en la cursada de 2do Cuatrimestre de 2008. Estuvo bastante bueno, era un Cliente de Descargas conectado a una Red tipo eMule, administrada por un Network Server, que tenia un proceso Cache Server donde almacenaba los pedidos más recientes, hasta tenía una red Gnutella con nodos que se podían caer/tirar abajo, y se tenían que re-descubrir. Cada nodo era un File Server. Similar al TP de este Cuatrimestre donde se tiene un Grid de Nodos, y uno de ellos es un DC (Distribuidor de Carga).

"No hay atajos en el camino del Ingeniero"
(Este mensaje fue modificado por última vez en: 21-09-2010 16:08 por Mati Dumrauf.)
21-09-2010 16:04
Envíale un email Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
malla31_3 Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 5
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Sep 2010
Mensaje: #6
RE: SO - Ayuda con HTTP
Gracias gente ya lo empeze a encaminar era lo q me faltaba para arrancar,
hasta la proxima pregunta abrazo!!!
21-09-2010 18:44
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Cheppak Sin conexión
Secretario General
-
*******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 952
Agradecimientos dados: 42
Agradecimientos: 107 en 42 posts
Registro en: May 2009
Mensaje: #7
RE: SO - Ayuda con HTTP
(21-09-2010 16:04)Matias Dumrauf escribió:  
(21-09-2010 14:09)Teseracto escribió:  (ah, lei cualquiera, pense que estaba haciendo el cliente =P).

Jajaj =P como Cliente usan cualquier browser (IE, Firefox, Chrome). La única vez que hubo que implementar un cliente que utilizara el protocolo HTTP fue en la cursada de 2do Cuatrimestre de 2008. Estuvo bastante bueno, era un Cliente de Descargas conectado a una Red tipo eMule, administrada por un Network Server, que tenia un proceso Cache Server donde almacenaba los pedidos más recientes, hasta tenía una red Gnutella con nodos que se podían caer/tirar abajo, y se tenían que re-descubrir. Cada nodo era un File Server. Similar al TP de este Cuatrimestre donde se tiene un Grid de Nodos, y uno de ellos es un DC (Distribuidor de Carga).
Se me pianta un lagrimon jaja.
21-09-2010 19:01
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Imakuni Sin conexión
Presidente del CEIT
Did you know that cashews come...
********

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 6.967
Agradecimientos dados: 112
Agradecimientos: 119 en 77 posts
Registro en: Jul 2008
Mensaje: #8
RE: SO - Ayuda con HTTP
Cita:Similar al TP de este Cuatrimestre donde se tiene un Grid de Nodos, y uno de ellos es un DC (Distribuidor de Carga).

A mi tambien se me pianta un lagrimon, es el tp que hice :')

Creo que justo lo que mencionas, es lo que tiene de distinto. En el tp - 2do cuatrimestre 2008, no tenias un grid de nodos, ni tampoco un distribuidor de carga. Los nodos formaban una estructura de arbol, y no habia carga para distribuir: el servidor que recibia mensajes del cliente, se encargaba de enviar mensajes que al final eran recibidos por todos los nodos del arbol.

En lo que si lo veo similar, es en el algoritmo de islas, y que tenes nodos =P.

Como venia de ese tp, pense que talvez en este tambien tenias que hacer un cliente http =P.
21-09-2010 23:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Mati Dumrauf Sin conexión
Empleado de Fotocopiadora
Soy el Gran Saiyaman!
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 43
Agradecimientos dados: 50
Agradecimientos: 21 en 7 posts
Registro en: Sep 2010
Mensaje: #9
RE: SO - Ayuda con HTTP
(21-09-2010 23:49)Teseracto escribió:  
Cita:Similar al TP de este Cuatrimestre donde se tiene un Grid de Nodos, y uno de ellos es un DC (Distribuidor de Carga).

A mi tambien se me pianta un lagrimon, es el tp que hice :')

Creo que justo lo que mencionas, es lo que tiene de distinto. En el tp - 2do cuatrimestre 2008, no tenias un grid de nodos, ni tampoco un distribuidor de carga. Los nodos formaban una estructura de arbol, y no habia carga para distribuir: el servidor que recibia mensajes del cliente, se encargaba de enviar mensajes que al final eran recibidos por todos los nodos del arbol.

En lo que si lo veo similar, es en el algoritmo de islas, y que tenes nodos =P.

Como venia de ese tp, pense que talvez en este tambien tenias que hacer un cliente http =P.

Jajaj que groso recordar tps anteriores de esta manera. =) Podría estar horas hablando de todos los TPs que hice. Aprendí bocha.

Con respecto a lo de este TP comparado con el del 2do Cuatrimestre de 2008, es exactamente como vos decís. De echo, no existía distribución de carga ya que la red gnutella tenía un sentido totalmente distinto. La idea era que el Network Manager pudiera pinguear cada cierto tiempo, configurado por Config File, para que se re-descubriera la red. Cada nodo (File Server) conocía y tenía una lista de nodos que estaban conectados a la red, y si el nodo con el que estaba conectado directamente se caía, ante una solicitud de PING, tenía que probar con siguiente nodo conocido.

Cuando el Cliente efectuaba un Request por su consola, la consulta no era por HTTP sino por protocolo IPC/IRC. Iba dirigida al Network Manager, quien primero consultaba (si estaba activada) al Cache Server si la consulta ya había sido efectuada -CACHE HIT-. La Cache guardaba los Response asociados a esos Requests. Y si daba CACHE MISS, o la Cache estaba desactivada, el pedido Request se transformaba en un Gnutella Package, y el Network Manager se la enviaba al File Server que tenía asociado, y éste lo distribuía tantas veces como el TTL del paquete estaba seteado previamente por el Network Manager (también por Config File).

La consulta a través de la red Gnutella tenía como objetivo que cada nodo File Server enviara la lista de archivos (de su file system local) que empezaran con el nombre solicitado por Request por parte del Cliente, y también los datos de sí mismo (IP y Puerto). De manera tal que, dado el TTL=N del paquete, a N File Servers les iba a llegar este pedido, e iban a enviar la respuesta al nodo anterior (que se la mandó), pero a la vez a re-distribuirla a los nodos que tuviera conectados a sí mismo.

Una vez que la información del pedido Request volvía al Network Manager, se armaba un paquete Response IPC/IRC con todos los datos de los archivos, por File Server, se actualizaba la Cache Server si estaba activada, y se enviaba de vuelta. Finalmente, el Cliente seleccionaba por consola que archivo quería descargar (previo a eso, la consola le mostraba un menú de opciones hermosamente ordenado) y para descargar ese archivo se creaba un nuevo Thread que se comunicaba por protocolo HTTP directamente con el File Server que tenía el archivo y lo descargaba. Magicoo.


También se me plantó un lagrimón, porque lo terminé y andaba genial. Pero en ese momento tuve otro lagrimón porque recursé igual xD

"No hay atajos en el camino del Ingeniero"
24-09-2010 16:44
Envíale un email Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.762
Agradecimientos dados: 136
Agradecimientos: 381 en 132 posts
Registro en: May 2008
Mensaje: #10
RE: SO - Ayuda con HTTP
uh
aguante el emulaso
24-09-2010 17:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.