.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADER 3 "November 04, 2020" "libcurl 7.78.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADER \- pass headers to the data stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);
.SH DESCRIPTION
Pass the long value \fIonoff\fP set to 1 to ask libcurl to include the headers
in the write callback (\fICURLOPT_WRITEFUNCTION(3)\fP). This option is
relevant for protocols that actually have headers or other meta-data (like
HTTP and FTP).

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 \fICURLOPT_WRITEFUNCTION(3)\fP callback is limited to only ever
get a maximum of \fICURL_MAX_WRITE_SIZE\fP bytes passed to it (16KB), while a
header can be longer and the \fICURLOPT_HEADERFUNCTION(3)\fP supports getting
called with headers up to \fICURL_MAX_HTTP_HEADER\fP bytes big (100KB).

It is often better to use \fICURLOPT_HEADERFUNCTION(3)\fP to get the header
data separately.

While named confusingly similar, \fICURLOPT_HTTPHEADER(3)\fP is used to set
custom HTTP headers!
.SH DEFAULT
0
.SH PROTOCOLS
Most
.SH EXAMPLE
.nf
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);
}
.fi
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
.BR CURLOPT_HEADERFUNCTION "(3), "
.BR CURLOPT_HTTPHEADER "(3), "
