CURLOPT_HTTP_VERSION(3) | Introduction to Library Functions | CURLOPT_HTTP_VERSION(3) |
CURLOPT_HTTP_VERSION - HTTP protocol version to use
#include <curl/curl.h> CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
Pass version a long, set to one of the values described below. They ask libcurl to use the specific HTTP versions.
Note that the HTTP version is just a request. libcurl still prioritizes to reuse existing connections so it might then reuse a connection using an HTTP version you have not asked for.
When libcurl uses HTTP/2 over HTTPS, it does not itself insist on TLS 1.2 or higher even though that is required by the specification. A user can add this version requirement with CURLOPT_SSLVERSION(3).
The alias CURL_HTTP_VERSION_2 was added in 7.43.0 to better reflect the actual protocol name.
Since 8.10.0 if this option is set for an HTTPS request then the application layer protocol version (ALPN) offered to the server is only HTTP/2. Prior to that both HTTP/1.1 and HTTP/2 were offered.
Since curl 7.62.0: CURL_HTTP_VERSION_2TLS
Before that: CURL_HTTP_VERSION_1_1
This functionality affects http only
int main(void) {
CURL *curl = curl_easy_init();
if(curl) {
CURLcode ret;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION,
(long)CURL_HTTP_VERSION_2TLS);
ret = curl_easy_perform(curl);
if(ret == CURLE_HTTP_RETURNED_ERROR) {
/* an HTTP response error problem */
}
} }
Added in curl 7.9.1
curl_easy_setopt(3) returns a CURLcode indicating success or error.
CURLE_OK (0) means everything was OK, non-zero means an error occurred, see libcurl-errors(3).
CURLOPT_ALTSVC(3), CURLOPT_HTTP09_ALLOWED(3), CURLOPT_HTTP200ALIASES(3), CURLOPT_SSLVERSION(3)
2025-05-02 | libcurl |