How to do keepalive http request with curl?

compile-fan picture compile-fan · May 22, 2011 · Viewed 16.3k times · Source

How can I request multiple pages from the same web server within the same connection?

So the client side need to extract the response for each request,of course it's the server's job to make the response in the same order as requested.

Anyone knows the trick?

Answer

cnicutar picture cnicutar · May 22, 2011

I don't know if you really meant "concurrent", but from the description I believe you just want to reuse the connection. If you simply perform two requests to the same server, it should reuse the connection

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);

Here are portions of the output:

* 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)

EDIT In light of comment

In that case you need the multi interface. The multi interafce says:

Enable multiple simultaneous transfers in the same thread without making it complicated for the application.

For an example, see multi-double.c ("Simply download two HTTP files!").