decompression gzip data with curl
Note that this option has been renamed to CURLOPT_ACCEPT_ENCODING
.
As stated by the documentation:
Sets the contents of the Accept-Encoding: header sent in a HTTP request, and enables decoding of a response when a Content-Encoding: header is received.
So it does decode (i.e decompress) the response. Three encoding are supported: "identity"
(does nothing), "zlib"
and "gzip"
. Alternatively you can pass an empty string which creates an Accept-Encoding:
header containing all supported encodings.
At last, httpbin is handy to test it out as it contains a dedicated endpoint that returns gzip content. Here's an example:
#include <curl/curl.h>intmain(void){ CURLcode rc; CURL *curl; curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, "http://httpbin.org/gzip"); curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "gzip"); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); rc = curl_easy_perform(curl); curl_easy_cleanup(curl); return (int) rc;}
It sends:
GET /gzip HTTP/1.1Host: httpbin.orgAccept: */*Accept-Encoding: gzip
And gets as response:
HTTP/1.1 200 OKAccess-Control-Allow-Origin: *Content-Encoding: gzipContent-Type: application/json...
And a JSON response (thus decompressed) is written on stdout.
c++ CURL library does not compress/decompress your data. you must do it yourself.
CURL *curl = curl_easy_init(); struct curl_slist *headers=NULL; headers = curl_slist_append(headers, "Accept: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "Content-Encoding: gzip"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers ); curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, zipped_data.data() ); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, zipped_data.size() );