2002-09-03 06:31:18 +08:00
|
|
|
|
2010-02-16 21:32:45 +08:00
|
|
|
Content Encoding Support for libcurl
|
2002-09-03 06:31:18 +08:00
|
|
|
|
2010-02-15 03:40:18 +08:00
|
|
|
* About content encodings:
|
2002-09-03 06:31:18 +08:00
|
|
|
|
|
|
|
HTTP/1.1 [RFC 2616] specifies that a client may request that a server encode
|
|
|
|
its response. This is usually used to compress a response using one of a set
|
2003-04-11 16:49:20 +08:00
|
|
|
of commonly available compression techniques. These schemes are `deflate' (the
|
|
|
|
zlib algorithm), `gzip' and `compress' [sec 3.5, RFC 2616]. A client requests
|
|
|
|
that the sever perform an encoding by including an Accept-Encoding header in
|
|
|
|
the request document. The value of the header should be one of the recognized
|
|
|
|
tokens `deflate', ... (there's a way to register new schemes/tokens, see sec
|
|
|
|
3.5 of the spec). A server MAY honor the client's encoding request. When a
|
|
|
|
response is encoded, the server includes a Content-Encoding header in the
|
|
|
|
response. The value of the Content-Encoding header indicates which scheme was
|
|
|
|
used to encode the data.
|
2002-09-03 06:31:18 +08:00
|
|
|
|
|
|
|
A client may tell a server that it can understand several different encoding
|
|
|
|
schemes. In this case the server may choose any one of those and use it to
|
|
|
|
encode the response (indicating which one using the Content-Encoding header).
|
|
|
|
It's also possible for a client to attach priorities to different schemes so
|
|
|
|
that the server knows which it prefers. See sec 14.3 of RFC 2616 for more
|
|
|
|
information on the Accept-Encoding header.
|
|
|
|
|
|
|
|
* Current support for content encoding:
|
|
|
|
|
2003-04-11 16:49:20 +08:00
|
|
|
Support for the 'deflate' and 'gzip' content encoding are supported by
|
|
|
|
libcurl. Both regular and chunked transfers should work fine. The library
|
|
|
|
zlib is required for this feature. 'deflate' support was added by James
|
|
|
|
Gallagher, and support for the 'gzip' encoding was added by Dan Fandrich.
|
2002-09-03 06:31:18 +08:00
|
|
|
|
|
|
|
* The libcurl interface:
|
|
|
|
|
2010-02-15 03:40:18 +08:00
|
|
|
To cause libcurl to request a content encoding use:
|
2002-09-03 06:31:18 +08:00
|
|
|
|
2011-04-15 04:59:34 +08:00
|
|
|
curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, <string>)
|
2002-09-03 06:31:18 +08:00
|
|
|
|
|
|
|
where <string> is the intended value of the Accept-Encoding header.
|
|
|
|
|
|
|
|
Currently, libcurl only understands how to process responses that use the
|
2011-04-15 04:59:34 +08:00
|
|
|
"deflate" or "gzip" Content-Encoding, so the only values for
|
|
|
|
CURLOPT_ACCEPT_ENCODING that will work (besides "identity," which does
|
|
|
|
nothing) are "deflate" and "gzip" If a response is encoded using the
|
|
|
|
"compress" or methods, libcurl will return an error indicating that the
|
|
|
|
response could not be decoded. If <string> is NULL no Accept-Encoding header
|
|
|
|
is generated. If <string> is a zero-length string, then an Accept-Encoding
|
|
|
|
header containing all supported encodings will be generated.
|
|
|
|
|
|
|
|
The CURLOPT_ACCEPT_ENCODING must be set to any non-NULL value for content to
|
|
|
|
be automatically decoded. If it is not set and the server still sends encoded
|
2003-04-11 16:49:20 +08:00
|
|
|
content (despite not having been asked), the data is returned in its raw form
|
|
|
|
and the Content-Encoding type is not checked.
|
2002-09-03 06:31:18 +08:00
|
|
|
|
|
|
|
* The curl interface:
|
|
|
|
|
|
|
|
Use the --compressed option with curl to cause it to ask servers to compress
|
2005-12-09 02:59:19 +08:00
|
|
|
responses using any format supported by curl.
|
2002-09-03 06:31:18 +08:00
|
|
|
|
|
|
|
James Gallagher <jgallagher@gso.uri.edu>
|
2003-04-11 16:49:20 +08:00
|
|
|
Dan Fandrich <dan@coneharvesters.com>
|