CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);
When asking to get the headers passed to the same callback as the body, it is not possible to accurately separate them again without detailed knowledge about the protocol in use.
Further: the CURLOPT_WRITEFUNCTION(3) callback is limited to only ever get a maximum of CURL_MAX_WRITE_SIZE bytes passed to it (16KB), while a header can be longer and the CURLOPT_HEADERFUNCTION(3) supports getting called with headers up to CURL_MAX_HTTP_HEADER bytes big (100KB).
It is often better to use CURLOPT_HEADERFUNCTION(3) to get the header data separately.
While named confusingly similar, CURLOPT_HTTPHEADER(3) is used to set custom HTTP headers!
CURL *curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); curl_easy_setopt(curl, CURLOPT_HEADER, 1L); curl_easy_perform(curl); }