xref: /aosp_15_r20/external/curl/docs/libcurl/curl_easy_header.md (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker---
2*6236dae4SAndroid Build Coastguard Workerc: Copyright (C) Daniel Stenberg, <[email protected]>, et al.
3*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl
4*6236dae4SAndroid Build Coastguard WorkerTitle: curl_easy_header
5*6236dae4SAndroid Build Coastguard WorkerSection: 3
6*6236dae4SAndroid Build Coastguard WorkerSource: libcurl
7*6236dae4SAndroid Build Coastguard WorkerSee-also:
8*6236dae4SAndroid Build Coastguard Worker  - CURLINFO_CONTENT_TYPE (3)
9*6236dae4SAndroid Build Coastguard Worker  - CURLOPT_HEADERFUNCTION (3)
10*6236dae4SAndroid Build Coastguard Worker  - curl_easy_nextheader (3)
11*6236dae4SAndroid Build Coastguard Worker  - curl_easy_perform (3)
12*6236dae4SAndroid Build Coastguard Worker  - libcurl-errors (3)
13*6236dae4SAndroid Build Coastguard WorkerProtocol:
14*6236dae4SAndroid Build Coastguard Worker  - HTTP
15*6236dae4SAndroid Build Coastguard WorkerAdded-in: 7.83.0
16*6236dae4SAndroid Build Coastguard Worker---
17*6236dae4SAndroid Build Coastguard Worker
18*6236dae4SAndroid Build Coastguard Worker# NAME
19*6236dae4SAndroid Build Coastguard Worker
20*6236dae4SAndroid Build Coastguard Workercurl_easy_header - get an HTTP header
21*6236dae4SAndroid Build Coastguard Worker
22*6236dae4SAndroid Build Coastguard Worker# SYNOPSIS
23*6236dae4SAndroid Build Coastguard Worker
24*6236dae4SAndroid Build Coastguard Worker~~~c
25*6236dae4SAndroid Build Coastguard Worker#include <curl/curl.h>
26*6236dae4SAndroid Build Coastguard Worker
27*6236dae4SAndroid Build Coastguard WorkerCURLHcode curl_easy_header(CURL *easy,
28*6236dae4SAndroid Build Coastguard Worker                           const char *name,
29*6236dae4SAndroid Build Coastguard Worker                           size_t index,
30*6236dae4SAndroid Build Coastguard Worker                           unsigned int origin,
31*6236dae4SAndroid Build Coastguard Worker                           int request,
32*6236dae4SAndroid Build Coastguard Worker                           struct curl_header **hout);
33*6236dae4SAndroid Build Coastguard Worker~~~
34*6236dae4SAndroid Build Coastguard Worker
35*6236dae4SAndroid Build Coastguard Worker# DESCRIPTION
36*6236dae4SAndroid Build Coastguard Worker
37*6236dae4SAndroid Build Coastguard Workercurl_easy_header(3) returns a pointer to a "curl_header" struct in **hout**
38*6236dae4SAndroid Build Coastguard Workerwith data for the HTTP response header *name*. The case insensitive
39*6236dae4SAndroid Build Coastguard Workernull-terminated header name should be specified without colon.
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Worker*index* 0 means asking for the first instance of the header. If the returned
42*6236dae4SAndroid Build Coastguard Workerheader struct has **amount** set larger than 1, it means there are more
43*6236dae4SAndroid Build Coastguard Workerinstances of the same header name available to get. Asking for a too big index
44*6236dae4SAndroid Build Coastguard Workermakes **CURLHE_BADINDEX** get returned.
45*6236dae4SAndroid Build Coastguard Worker
46*6236dae4SAndroid Build Coastguard WorkerThe *origin* argument is for specifying which headers to receive, as a single
47*6236dae4SAndroid Build Coastguard WorkerHTTP transfer might provide headers from several different places and they may
48*6236dae4SAndroid Build Coastguard Workerthen have different importance to the user and headers using the same name
49*6236dae4SAndroid Build Coastguard Workermight be used. The *origin* is a bitmask for what header sources you want. See
50*6236dae4SAndroid Build Coastguard Workerthe descriptions below.
51*6236dae4SAndroid Build Coastguard Worker
52*6236dae4SAndroid Build Coastguard WorkerThe *request* argument tells libcurl from which request you want headers
53*6236dae4SAndroid Build Coastguard Workerfrom. A single transfer might consist of a series of HTTP requests and this
54*6236dae4SAndroid Build Coastguard Workerargument lets you specify which particular individual request you want the
55*6236dae4SAndroid Build Coastguard Workerheaders from. 0 being the first request and then the number increases for
56*6236dae4SAndroid Build Coastguard Workerfurther redirects or when multi-state authentication is used. Passing in -1 is
57*6236dae4SAndroid Build Coastguard Workera shortcut to "the last" request in the series, independently of the actual
58*6236dae4SAndroid Build Coastguard Workeramount of requests used.
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Workerlibcurl stores and provides the actually used "correct" headers. If for
61*6236dae4SAndroid Build Coastguard Workerexample two headers with the same name arrive and the latter overrides the
62*6236dae4SAndroid Build Coastguard Workerformer, then only the latter is provided. If the first header survives the
63*6236dae4SAndroid Build Coastguard Workersecond, then only the first one is provided. An application using this API
64*6236dae4SAndroid Build Coastguard Workerdoes not have to bother about multiple headers used wrongly.
65*6236dae4SAndroid Build Coastguard Worker
66*6236dae4SAndroid Build Coastguard WorkerThe memory for the returned struct is associated with the easy handle and
67*6236dae4SAndroid Build Coastguard Workersubsequent calls to curl_easy_header(3) clobber the struct used in the
68*6236dae4SAndroid Build Coastguard Workerprevious calls for the same easy handle. The application needs to copy the data if
69*6236dae4SAndroid Build Coastguard Workerit wants to keep it around. The memory used for the struct gets freed with
70*6236dae4SAndroid Build Coastguard Workercalling curl_easy_cleanup(3) of the easy handle.
71*6236dae4SAndroid Build Coastguard Worker
72*6236dae4SAndroid Build Coastguard WorkerThe first line in an HTTP response is called the status line. It is not
73*6236dae4SAndroid Build Coastguard Workerconsidered a header by this function. Headers are the "name: value" lines
74*6236dae4SAndroid Build Coastguard Workerfollowing the status.
75*6236dae4SAndroid Build Coastguard Worker
76*6236dae4SAndroid Build Coastguard WorkerThis function can be used before (all) headers have been received and is fine
77*6236dae4SAndroid Build Coastguard Workerto call from within libcurl callbacks. It returns the state of the headers at
78*6236dae4SAndroid Build Coastguard Workerthe time it is called.
79*6236dae4SAndroid Build Coastguard Worker
80*6236dae4SAndroid Build Coastguard Worker# The header struct
81*6236dae4SAndroid Build Coastguard Worker
82*6236dae4SAndroid Build Coastguard Worker~~~c
83*6236dae4SAndroid Build Coastguard Workerstruct curl_header {
84*6236dae4SAndroid Build Coastguard Worker   char *name;
85*6236dae4SAndroid Build Coastguard Worker   char *value;
86*6236dae4SAndroid Build Coastguard Worker   size_t amount;
87*6236dae4SAndroid Build Coastguard Worker   size_t index;
88*6236dae4SAndroid Build Coastguard Worker   unsigned int origin;
89*6236dae4SAndroid Build Coastguard Worker   void *anchor;
90*6236dae4SAndroid Build Coastguard Worker};
91*6236dae4SAndroid Build Coastguard Worker~~~
92*6236dae4SAndroid Build Coastguard Worker
93*6236dae4SAndroid Build Coastguard WorkerThe data **name** field points to, is the same as the requested name, but
94*6236dae4SAndroid Build Coastguard Workermight have a different case.
95*6236dae4SAndroid Build Coastguard Worker
96*6236dae4SAndroid Build Coastguard WorkerThe data **value** field points to, comes exactly as delivered over the
97*6236dae4SAndroid Build Coastguard Workernetwork but with leading and trailing whitespace and newlines stripped
98*6236dae4SAndroid Build Coastguard Workeroff. The `value` data is null-terminated. For legacy HTTP/1 "folded headers",
99*6236dae4SAndroid Build Coastguard Workerthis API provides the full single value in an unfolded manner with a single
100*6236dae4SAndroid Build Coastguard Workerwhitespace between the lines.
101*6236dae4SAndroid Build Coastguard Worker
102*6236dae4SAndroid Build Coastguard Worker**amount** is how many headers using this name that exist, within the origin
103*6236dae4SAndroid Build Coastguard Workerand request scope asked for.
104*6236dae4SAndroid Build Coastguard Worker
105*6236dae4SAndroid Build Coastguard Worker**index** is the zero based entry number of this particular header, which in
106*6236dae4SAndroid Build Coastguard Workercase this header was used more than once in the requested scope can be larger
107*6236dae4SAndroid Build Coastguard Workerthan 0 but is always less than **amount**.
108*6236dae4SAndroid Build Coastguard Worker
109*6236dae4SAndroid Build Coastguard WorkerThe **origin** field in the "curl_header" struct has one of the origin bits
110*6236dae4SAndroid Build Coastguard Workerset, indicating where from the header originates. At the time of this writing,
111*6236dae4SAndroid Build Coastguard Workerthere are 5 bits with defined use. The undocumented 27 remaining bits are
112*6236dae4SAndroid Build Coastguard Workerreserved for future use and must not be assumed to have any particular value.
113*6236dae4SAndroid Build Coastguard Worker
114*6236dae4SAndroid Build Coastguard Worker**anchor** is a private handle used by libcurl internals. Do not modify.
115*6236dae4SAndroid Build Coastguard Worker
116*6236dae4SAndroid Build Coastguard Worker# ORIGINS
117*6236dae4SAndroid Build Coastguard Worker
118*6236dae4SAndroid Build Coastguard Worker## CURLH_HEADER
119*6236dae4SAndroid Build Coastguard Worker
120*6236dae4SAndroid Build Coastguard WorkerThe header arrived as a header from the server.
121*6236dae4SAndroid Build Coastguard Worker
122*6236dae4SAndroid Build Coastguard Worker## CURLH_TRAILER
123*6236dae4SAndroid Build Coastguard Worker
124*6236dae4SAndroid Build Coastguard WorkerThe header arrived as a trailer. A header that arrives after the body.
125*6236dae4SAndroid Build Coastguard Worker
126*6236dae4SAndroid Build Coastguard Worker## CURLH_CONNECT
127*6236dae4SAndroid Build Coastguard Worker
128*6236dae4SAndroid Build Coastguard WorkerThe header arrived in a CONNECT response. A CONNECT request is being done to
129*6236dae4SAndroid Build Coastguard Workersetup a transfer "through" an HTTP(S) proxy.
130*6236dae4SAndroid Build Coastguard Worker
131*6236dae4SAndroid Build Coastguard Worker## CURLH_1XX
132*6236dae4SAndroid Build Coastguard Worker
133*6236dae4SAndroid Build Coastguard WorkerThe header arrived in an HTTP 1xx response. A 1xx response is an "intermediate"
134*6236dae4SAndroid Build Coastguard Workerresponse that might happen before the "real" response.
135*6236dae4SAndroid Build Coastguard Worker
136*6236dae4SAndroid Build Coastguard Worker## CURLH_PSEUDO
137*6236dae4SAndroid Build Coastguard Worker
138*6236dae4SAndroid Build Coastguard WorkerThe header is an HTTP/2 or HTTP/3 pseudo header
139*6236dae4SAndroid Build Coastguard Worker
140*6236dae4SAndroid Build Coastguard Worker# %PROTOCOLS%
141*6236dae4SAndroid Build Coastguard Worker
142*6236dae4SAndroid Build Coastguard Worker# EXAMPLE
143*6236dae4SAndroid Build Coastguard Worker
144*6236dae4SAndroid Build Coastguard Worker~~~c
145*6236dae4SAndroid Build Coastguard Workerint main(void)
146*6236dae4SAndroid Build Coastguard Worker{
147*6236dae4SAndroid Build Coastguard Worker  struct curl_header *type;
148*6236dae4SAndroid Build Coastguard Worker  CURL *curl = curl_easy_init();
149*6236dae4SAndroid Build Coastguard Worker  if(curl) {
150*6236dae4SAndroid Build Coastguard Worker    CURLHcode h;
151*6236dae4SAndroid Build Coastguard Worker    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
152*6236dae4SAndroid Build Coastguard Worker    curl_easy_perform(curl);
153*6236dae4SAndroid Build Coastguard Worker    h = curl_easy_header(curl, "Content-Type", 0, CURLH_HEADER, -1, &type);
154*6236dae4SAndroid Build Coastguard Worker    curl_easy_cleanup(curl);
155*6236dae4SAndroid Build Coastguard Worker  }
156*6236dae4SAndroid Build Coastguard Worker}
157*6236dae4SAndroid Build Coastguard Worker~~~
158*6236dae4SAndroid Build Coastguard Worker
159*6236dae4SAndroid Build Coastguard Worker# %AVAILABILITY%
160*6236dae4SAndroid Build Coastguard Worker
161*6236dae4SAndroid Build Coastguard Worker# RETURN VALUE
162*6236dae4SAndroid Build Coastguard Worker
163*6236dae4SAndroid Build Coastguard WorkerThis function returns a CURLHcode indicating success or error.
164