| .\" ************************************************************************** |
| .\" * _ _ ____ _ |
| .\" * Project ___| | | | _ \| | |
| .\" * / __| | | | |_) | | |
| .\" * | (__| |_| | _ <| |___ |
| .\" * \___|\___/|_| \_\_____| |
| .\" * |
| .\" * Copyright (C) 1998 - 2021, 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_PROXY 3 "October 31, 2021" "libcurl 7.80.0" "curl_easy_setopt options" |
| |
| .SH NAME |
| CURLOPT_PROXY \- proxy to use |
| .SH SYNOPSIS |
| #include <curl/curl.h> |
| |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy); |
| .SH DESCRIPTION |
| Set the \fIproxy\fP to use for the upcoming request. The parameter should be a |
| char * to a null-terminated string holding the host name or dotted numerical |
| IP address. A numerical IPv6 address must be written within [brackets]. |
| |
| To specify port number in this string, append :[port] to the end of the host |
| name. The proxy's port number may optionally be specified with the separate |
| option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to |
| using port 1080 for proxies. |
| |
| The proxy string may be prefixed with [scheme]:// to specify which kind of |
| proxy is used. |
| |
| .RS |
| .IP http:// |
| HTTP Proxy. Default when no scheme or proxy type is specified. |
| .IP https:// |
| HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS) |
| .IP socks4:// |
| SOCKS4 Proxy. |
| .IP socks4a:// |
| SOCKS4a Proxy. Proxy resolves URL hostname. |
| .IP socks5:// |
| SOCKS5 Proxy. |
| .IP socks5h:// |
| SOCKS5 Proxy. Proxy resolves URL hostname. |
| .RE |
| |
| Without a scheme prefix, \fICURLOPT_PROXYTYPE(3)\fP can be used to specify |
| which kind of proxy the string identifies. |
| |
| When you tell the library to use an HTTP proxy, libcurl will transparently |
| convert operations to HTTP even if you specify an FTP URL etc. This may have |
| an impact on what other features of the library you can use, such as |
| \fICURLOPT_QUOTE(3)\fP and similar FTP specifics that do not work unless you |
| tunnel through the HTTP proxy. Such tunneling is activated with |
| \fICURLOPT_HTTPPROXYTUNNEL(3)\fP. |
| |
| Setting the proxy string to "" (an empty string) will explicitly disable the |
| use of a proxy, even if there is an environment variable set for it. |
| |
| A proxy host string can also include protocol scheme (http://) and embedded |
| user + password. |
| |
| The application does not have to keep the string around after setting this |
| option. |
| .SH "Environment variables" |
| libcurl respects the proxy environment variables named \fBhttp_proxy\fP, |
| \fBftp_proxy\fP, \fBsftp_proxy\fP etc. If set, libcurl will use the specified |
| proxy for that URL scheme. So for a "FTP://" URL, the \fBftp_proxy\fP is |
| considered. \fBall_proxy\fP is used if no protocol specific proxy was set. |
| |
| If \fBno_proxy\fP (or \fBNO_PROXY\fP) is set, it is the exact equivalent of |
| setting the \fICURLOPT_NOPROXY(3)\fP option. |
| |
| The \fICURLOPT_PROXY(3)\fP and \fICURLOPT_NOPROXY(3)\fP options override |
| environment variables. |
| .SH DEFAULT |
| Default is NULL, meaning no proxy is used. |
| |
| When you set a host name to use, do not assume that there's any particular |
| single port number used widely for proxies. Specify it! |
| .SH PROTOCOLS |
| All except file://. Note that some protocols do not work well over proxy. |
| .SH EXAMPLE |
| .nf |
| CURL *curl = curl_easy_init(); |
| if(curl) { |
| curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.txt"); |
| curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80"); |
| curl_easy_perform(curl); |
| } |
| .fi |
| .SH AVAILABILITY |
| Since 7.14.1 the proxy environment variable names can include the protocol |
| scheme. |
| |
| Since 7.21.7 the proxy string supports the socks protocols as "schemes". |
| |
| Since 7.50.2, unsupported schemes in proxy strings cause libcurl to return |
| error. |
| .SH RETURN VALUE |
| Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or |
| CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| .SH "SEE ALSO" |
| .BR CURLOPT_PROXYPORT "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), " |
| .BR CURLOPT_PROXYTYPE "(3)" |