Varios http GET

Nedaim

Os cuento. Tengo que hacer un programilla en el lenguaje que me de la gana que aproveche la capacidad de http 1.1 de recibir varias peticiones GET por una misma conexion sin abrirla y cerrarla y que no espere a recibir las respuestas para hacer el siguiente GET.

El problema es que ya he probado con java que es lo que mas controlo y no parece que sea posible y ahora estaba probando con python y tampoco lo consigo. Con python las peticiones GET están más estructuradas que en java pero si no lees la respuesta y haces otro GET salta error igualmente.

Adjunto el codigo python. Las lineas comentadas son lo mismo que hay arriba para que veais donde coloco las lecturas de respuestas cuando hago las peticiones GET seguidas.

import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("GET", "/index.html")
r1 = conn.getresponse()
print r1.status, r1.reason
data1 = r1.read()
conn.request("GET", "/parrot.spam")
# r1 = conn.getresponse()
# print r1.status, r1.reason
# data1 = r1.read()
r2 = conn.getresponse()
print r2.status, r2.reason
data2 = r2.read()
conn.close()

A ver me podeis iluminar sobre este tema gracias de ante mano.

PD: No tengo ni idea de como funciona http solo se que en teoria es capaz de hacer lo que dije antes asique igual la estoy cagando en algo basico.

elkaoD

Igual necesitas indicar que es connection keepalive.

O igual el profesor espera que bajéis a TCP y lo hagáis a mano.

1 respuesta
Nedaim

#2 mmm lo de keepalive no creo porque en el orden en que estan puestos los GET en el codigo si que funciona sin volver a crear la conexion.

El profesor nos dijo que con sockets en C se puede hacer pero es mucho mas trabajo que era mejor buscar una forma alternativa. Nos ha dado total libertad. El dice que lo hizo con un script en bash tambien tenia pensado probar con eso pero nos ha dado pocas pistas.

LOc0

En Python ni idea, pero para usar pipelining en HTTP 1.1 tienes que utilizar una conexión persistente (Connection: keep-alive) y tener en cuenta que las respuestas pueden venir con content-length o usando chunking. Más info aquí ->

http://www.subbu.org/blog/2004/11/persistent-connections-pipelining-and-chunking

PASA de C a no ser que tengas mucha curiosidad. Ahora no tengo tiempo, pero en PHP con fsockopen son 30 líneas...

Salu2 ;)

1 respuesta
Nedaim

#4 Muchas gracias me lo voy a mirar ahora mismo.

Usuarios habituales

  • Nedaim
  • LOc0
  • elkaoD