2011-05-22 26 views
6

¿Cómo puedo solicitar varias páginas del mismo servidor web dentro de la misma conexión?¿Cómo hacer la solicitud de keepalive http con curl?

Por lo tanto, el lado del cliente necesita extraer la respuesta para cada solicitud, por supuesto, es el trabajo del servidor hacer la respuesta en el mismo orden según lo solicitado.

¿Alguien sabe el truco?

+0

Eso no es lo que significa concurrente en informática. He editado el título de la pregunta para reflejar su pregunta real. –

+0

@Robin Green Así que supongo que * sí * quería solicitudes simultáneas después de todo – cnicutar

+1

Si está utilizando el protocolo HTTP 1.1, keep-alive es la configuración predeterminada a menos que haya "Conexión: cerrar" en el encabezado de solicitud o respuesta. –

Respuesta

6

No sé si realmente quiso decir "concurrente", pero por la descripción creo que solo quiere reutilizar la conexión. Si simplemente perform dos peticiones al mismo servidor, se debe reutilizar la conexión

persistant.c

/* get the first document */ 
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/"); 
res = curl_easy_perform(curl); 


/* get another document from the same server using the same 
    connection */ 
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/docs/"); 
res = curl_easy_perform(curl); 

Aquí son partes de la salida:

* About to connect() to example.com port 80 (#0) 
* Trying 192.0.32.10... * connected 
* Connected to example.com (192.0.32.10) port 80 (#0) 

[...] 

* HTTP/1.0 connection set to keep alive! 
< Connection: Keep-Alive 
Connection: Keep-Alive 

[...] 

* Connection #0 to host example.com left intact 
* Re-using existing connection! (#0) with host example.com 
* Connected to example.com (192.0.32.10) port 80 (#0) 

EDITAR A la luz de los comentarios

En ese caso necesita la interfaz multi. El interafce multi dice:

habilitar varias transferencias simultáneas en el mismo hilo sin por lo que es complicado para la aplicación .

Para un ejemplo, véase multi-double.c ("Basta con descargar dos archivos HTTP!").

+0

no exactamente. Por keep-alive, quiero decir que se enviaron 2 solicitudes primero , entonces se llama 'curl_easy_perform' (quizás dos veces) para obtener la respuesta. –

+0

¿Cómo hiciste curl para generar esa información detallada? –

+0

@ compile-fan 'curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L);' – cnicutar

Cuestiones relacionadas