xref: /curl/docs/libcurl/libcurl-env.md (revision e3fe0200)
1---
2c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
3SPDX-License-Identifier: curl
4Title: libcurl-env
5Section: 3
6Source: libcurl
7See-also:
8  - libcurl-env-dbg (3)
9Protocol:
10  - All
11---
12
13# NAME
14
15libcurl-env - environment variables libcurl understands
16
17# DESCRIPTION
18
19libcurl reads and understands a set of environment variables that if set
20controls and changes behaviors. This is the full list of variables to set and
21description of what they do. Also note that curl, the command line tool,
22supports a set of additional environment variables independently of this.
23
24## `[scheme]_proxy`
25
26When libcurl is given a URL to use in a transfer, it first extracts the scheme
27part from the URL and checks if there is a given proxy set for that in its
28corresponding environment variable. A URL like https://example.com makes
29libcurl use the **http_proxy** variable, while a URL like ftp://example.com
30uses the **ftp_proxy** variable.
31
32These proxy variables are also checked for in their uppercase versions, except
33the **http_proxy** one which is only used lowercase. Note also that some
34systems actually have a case insensitive handling of environment variables and
35then of course **HTTP_PROXY** still works.
36
37An exception exists for the WebSocket **ws** and **wss** URL schemes, where
38libcurl first checks **ws_proxy** or **wss_proxy** but if they are not set, it
39falls back and tries the http and https versions instead if set.
40
41## `ALL_PROXY`
42
43This is a setting to set proxy for all URLs, independently of what scheme is
44being used. Note that the scheme specific variables overrides this one if set.
45
46## `CURL_SSL_BACKEND`
47
48When libcurl is built to support multiple SSL backends, it selects a specific
49backend at first use. If no selection is done by the program using libcurl,
50this variable's selection is used. Setting a name that is not a built-in
51alternative makes libcurl stay with the default.
52
53SSL backend names (case-insensitive): BearSSL, GnuTLS, mbedTLS,
54nss, OpenSSL, rustls, Schannel, Secure-Transport, wolfSSL
55
56## `HOME`
57
58When the netrc feature is used (CURLOPT_NETRC(3)), this variable is
59checked as the primary way to find the "current" home directory in which
60the .netrc file is likely to exist.
61
62## `USERPROFILE`
63
64When the netrc feature is used (CURLOPT_NETRC(3)), this variable is
65checked as the secondary way to find the "current" home directory (on Windows
66only) in which the .netrc file is likely to exist.
67
68## `LOGNAME`
69
70Username to use when invoking the *ntlm-wb* tool, if *NTLMUSER* was
71not set.
72
73## `NO_PROXY`
74
75This has the same functionality as the CURLOPT_NOPROXY(3) option: it
76gives libcurl a comma-separated list of hostname patterns for which libcurl
77should not use a proxy.
78
79## `NTLMUSER`
80
81Username to use when invoking the *ntlm-wb* tool.
82
83## `SSLKEYLOGFILE`
84
85When set and libcurl runs with a SSL backend that supports this feature,
86libcurl saves SSL secrets into the given filename. Using those SSL secrets,
87other tools (such as Wireshark) can decrypt the SSL communication and
88analyze/view the traffic.
89
90These secrets and this file might be sensitive. Users are advised to take
91precautions so that they are not stolen or otherwise inadvertently revealed.
92
93## `USER`
94
95Username to use when invoking the *ntlm-wb* tool, if *NTLMUSER* and *LOGNAME*
96were not set.
97
98# Debug Variables
99
100Debug variables are intended for internal use and are documented in
101libcurl-env-dbg(3).
102