GNURLOPT_HTTP_VERSION(3)

πŸ“¦ version 7.72.0, in nixos 26.05, nixpkgs unstable

πŸ’– GNURLOPT_HTTP_VERSION(3) πŸ’–

okay bestie, this page is from the curl_easy_setopt options manual, and it's literally all about telling libcurl which HTTP version to use. no cap, every flag matters, so let's go πŸ’…


✨ NAME ✨

CURLOPT_HTTP_VERSION β€” specify HTTP protocol version to use


πŸŽ€ SYNOPSIS πŸŽ€

#include <gnurl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long
version);

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so you pass version as a long, set to one of the values below. These ask libcurl to use the specific HTTP versions. vibe check: the HTTP version is just a request. libcurl will still prioritize re-using an existing connection, so it might then re-use a connection using a HTTP version you haven't asked for. iykyk 😭

  • CURL_HTTP_VERSION_NONE β€” we don't care about what version the library uses. libcurl will use whatever it thinks fit. main character energy, honestly ✨
  • CURL_HTTP_VERSION_1_0 β€” enforce HTTP 1.0 requests. periodt.
  • CURL_HTTP_VERSION_1_1 β€” enforce HTTP 1.1 requests. iconic behavior πŸ’…
  • CURL_HTTP_VERSION_2_0 β€” attempt HTTP 2 requests. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be negotiated with the server. (Added in 7.33.0) The alias CURL_HTTP_VERSION_2 was added in 7.43.0 to better reflect the actual protocol name. slay πŸ¦‹
  • CURL_HTTP_VERSION_2TLS β€” attempt HTTP 2 over TLS (HTTPS) only. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be negotiated with the HTTPS server. For clear text HTTP servers, libcurl will use 1.1. (Added in 7.47.0) secure little moment πŸŽ€
  • CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE β€” issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. (Added in 7.49.0) confident queen behavior πŸ‘‘
  • CURL_HTTP_VERSION_3 β€” (Added in 7.66.0) setting this value will make libcurl attempt to use HTTP/3 directly to server given in the URL. Note that this cannot gracefully downgrade to earlier HTTP version if the server doesn't support HTTP/3. For more reliably upgrading to HTTP/3, set the preferred version to something lower and let the server announce its HTTP/3 support via Alt-Svc:. See CURLOPT_ALTSVC(3). future vibes 🌈

🌸 DEFAULT 🌸

Since curl 7.62.0: CURL_HTTP_VERSION_2TLS

Before that: CURL_HTTP_VERSION_1_1


⭐ PROTOCOLS ⭐

HTTP


🌈 EXAMPLE 🌈

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, CURL_HTTP_VERSION_2TLS);
  ret = curl_easy_perform(curl);
  if(ret == CURLE_HTTP_RETURNED_ERROR) {
    /* an HTTP response error problem */
  }
}

🧚 AVAILABILITY 🧚

Along with HTTP. it's giving matching-set energy ✨


πŸ’œ RETURN VALUE πŸ’œ

Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. that's the whole return vibe, bestie 🫢


πŸ”₯ SEE ALSO πŸ”₯


okay that's the page, bestie β€” from libcurl 7.37.0, dated 17 Jun 2014, and this is GNURLOPT_HTTP_VERSION(3) signing off πŸ’…βœ¨πŸ«Ά

πŸ“¦ where this page comes from