TclCurl - Transfer data to and from URLs using FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE, LDAP, LDAPS, IMAP, IMAPS, POP, POP3, SMTP, SMTPS, and GOPHER.
curl::init
curl::transfer ?options?
curl::version
curl::escape url
curl::unescape url
curl::curlConfig option
curl::versioninfo option
curl::easystrerror errorCode
curlHandle configure ?options?
curlHandle perform
curlHandle getinfo curlinfo_option
curlHandle cleanup
curlHandle reset
curlHandle duphandle
curlHandle pause
curlHandle resume
The TclCurl extension gives Tcl programmers access to the libcurl library written by Daniel Stenberg. With TclCurl, you can download from URLs, upload to them, and perform many other network transfer operations. For more information, see http://curl.haxx.se.
This procedure must be called first. It returns a curlHandle, which you use
to invoke TclCurl procedures. Calling init initializes TclCurl, and each
call to init MUST have a corresponding call to cleanup when the operation
is complete.
You should perform all sequential file transfers using the same curlHandle.
This allows TclCurl to reuse persistent connections when possible.
RETURN VALUE
The curlHandle to use.
configure
is used to set the options for a transfer. Most operations in TclCurl have default behavior, and you can change that behavior by setting the appropriate options as documented. Each option is specified as the option followed by a parameter.
Notes:
The options set with this procedure apply to subsequent data transfers
performed when you invoke perform.
The options are not reset between transfers (except where noted), so if you want subsequent transfers with different options, you must change them between the transfers. You can optionally reset all options back to the internal default with curlHandle reset.
curlHandle is the value returned by the curl::init call.
OPTIONS
Set this option to 1 to make the library display detailed information about its operations. This option is useful when debugging libcurl and protocol-related problems.
You will rarely want to enable this in production, but it is often helpful when debugging or reporting problems. Another useful debugging option is
-debugproc
Set this option to 1 to include headers in the body output. This is relevant only for protocols that actually send headers before the data, such as HTTP.
Set this option to 1 to disable the progress meter completely. It also prevents progressproc from being called.
Set this option to 1 to make TclCurl avoid functions that install signal handlers or cause signals to be sent to the process. This option exists mainly so that multi-threaded Unix applications can still use timeout options without risking signal-related side effects.
If this option is set and libcurl has been built with the standard name resolver, timeouts will not occur while name resolution is in progress. Consider building libcurl with c-ares support to enable asynchronous DNS lookups, which allows proper timeouts for name resolution without signals.
Setting nosignal to 1 makes libcurl stop asking the system to ignore SIGPIPE signals. Such signals may otherwise be sent by the system when data is written to a socket that has been closed by the peer. libcurl tries to avoid triggering SIGPIPE, but some operating systems provide no reliable way to prevent it, and even on those that do, some corner cases remain. In addition, using ntlm_Wb authentication may cause a SIGCHLD signal to be raised.
Set this option to 1 to transfer multiple files that match a file name pattern. The pattern can be specified as part of the -url option, using an fnmatch-like pattern (shell pattern matching) in the last part of the URL, that is, the file name.
By default, TclCurl uses its internal wildcard matching implementation. You can provide your own matching function with the -fnmatchproc option.
At present, this feature is supported only for FTP downloads.
A brief introduction of its syntax follows:
ftp://example.com/some/path/***.txt** (for all .txt files from the root
directory)
- ? - QUESTION MARK
The question mark matches any single character.
ftp://example.com/some/path/**photo?.jpeg**
- [ - BRACKET EXPRESSION
The left bracket opens a bracket expression. The question mark and asterisk have no special meaning in a bracket expression. Each bracket expression ends by the right bracket and matches exactly one character. Some examples follow:
[a-zA-Z0-9] or [f-gF-G] - character interval
[abc] - character enumeration
[^abc] or [!abc] - negation
[[:name:]] class expression. Supported classes are alnum,lower, space, alpha, digit, print, upper, blank, graph, xdigit.
[][-!^] - special case - matches only ‘-’, ‘]’, ‘[‘, ‘!’ or ‘^’. These characters have no special purpose.
[\[\]\\] - escape syntax. Matches ‘[‘, ‘]’ or ‘\‘.
Using the rules above, a file name pattern can be constructed:
ftp://example.com/some/path/**[a-z[:upper:]\\\\].jpeg**
Sets a Tcl procedure that TclCurl invokes whenever received data is available to be handled. The callback procedure must have a single argument. When the procedure is invoked, that argument refers to the contents of a data buffer managed by libcurl.
NOTE: The amount of data passed on each invocation is not fixed. The callback may be invoked with an empty buffer, or with a buffer containing a large amount of data.
File in which the transferred data will be saved.
Sets a Tcl procedure that TclCurl calls whenever it needs to read data to
send to the peer. The procedure must take one parameter, which contains the
maximum number of bytes to read. It should return the actual number of
bytes read, or 0 if you want to stop the transfer.
If you stop the current transfer by returning 0 prematurely, for example
after indicating that you would upload N bytes but uploading fewer than
N, the server may appear to hang while waiting for the remaining data.
When doing TFTP uploads, you must return exactly the amount of data requested by the callback. Otherwise, the server may treat it as the final packet and end the transfer.
File from which the data will be transferred.
Name of the Tcl procedure that TclCurl invokes at regular intervals during
an operation, roughly once per second or more often, whether or not data is
currently being transferred. Unknown or unused argument values passed to
the callback are set to zero. For example, if you only download data, the
upload size remains 0. The procedure must have the following prototype:
proc ProgressCallback {dltotal dlnow ultotal ulnow}
For this option to work, you must set the -noprogress option to 0.
Setting this option to the empty string restores the original progress
function.
If you transfer data with the multi interface, this procedure will not be called during periods of idleness unless you call the appropriate procedure that performs transfers.
You can pause and resume a transfer from within this procedure using the pause and resume commands.
Pass the file name to which the header part of the received data will be written. Headers are written to this file one by one, and only complete lines are written. This makes header parsing straightforward.
See also the -headervar option to get the headers into an array.
Name of the procedure that receives the debug data produced by the -verbose option. The callback procedure must have two arguments:
debugProc {infoType data}
The infoType argument identifies the kind of debug information:
0 text, 1 incoming header, 2 outgoing header, 3 incoming data,
4 outgoing data, 5 incoming SSL data, and 6 outgoing SSL data.
The data argument contains the corresponding data buffer.
Name of the procedure that is called before a file is transferred by FTP. The callback procedure must have one argument:
ChunkBgnProc {remains}
The remains argument is the number of files left to be transferred or skipped.
This callback makes sense only when using the -wildcard option.
Name of the variable in the global scope that will contain the data for the
file about to be transferred. If you do not use this option, ::fileData
is used.
The available data is: filename, filetype (file, directory,
symlink, device block, device char, named pipe, socket, door,
or error if it could not be identified), time, perm, uid, gid,
size, hardlinks, and flags.
Name of the procedure that is called after a file has been transferred or skipped by FTP. The callback procedure takes no arguments:
ChunkEndProc {}
It should return 0 if everything is fine and 1 if an error occurred.
Name of the procedure that is called instead of the internal wildcard matching function. The callback procedure must have two arguments:
FnMatchProc {pattern string}
The pattern argument contains the pattern to be matched. The string
argument contains the candidate string. The procedure must return 0 if
the string matches the pattern and 1 otherwise.
Pass the name of a variable in which TclCurl may store human-readable error messages. This can provide more information than the command return code alone.
Pass a file name. TclCurl uses this stream instead of stderr when
reporting errors.
Set this option to 1 to make the transfer fail if the returned HTTP status code is 400 or greater. By default, TclCurl returns the page normally and does not treat such status codes as transfer errors.
This behavior is not fail-safe, and in some cases non-successful response codes may still pass through, especially when authentication is involved, as with status codes 401 and 407.
Some header data may be transferred before this condition is detected. For
example, a 100-continue response may be received for a POST or PUT
request before a subsequent 401 or 407 response is returned.
The URL to use for the transfer.
If the URL does not include a protocol part, such as http:// or
ftp://, TclCurl attempts to guess the protocol from the host name.
If the protocol specified in the URL is not supported, TclCurl returns the
unsupported protocol error when you call perform. Use
curl::versioninfo for detailed information about the supported
protocols.
Starting with version 7.22.0, the fragment part of the URI is no longer sent as part of the path, unlike earlier versions.
NOTE: This is the only option that must be set before perform is called.
Pass a lowercase list of protocols to limit which protocols TclCurl may use for the transfer. This allows a TclCurl build that supports a wide range of protocols to be restricted for specific transfers to a subset of them.
Accepted protocols are http, https, ftp, ftps, scp, sftp,
telnet, ldap, ldaps, dict, file, tftp, imap, imaps,
pop, pop3, smtp, smtps, gopher, and all.
Pass a lowercase list of accepted protocols to limit which protocols TclCurl may use when following a redirect with -followlocation enabled. This allows specific transfers to be restricted to a subset of protocols for redirections.
By default, TclCurl allows all protocols except FILE and SCP. This
differs from versions before 7.19.4, which would follow redirects to all
supported protocols unconditionally.
If you need to use an HTTP proxy, set the proxy string with this option.
To specify a port number in the string, append :[port] to the end of
the host name. The proxy string may be prefixed with [protocol]://,
although such a prefix is ignored unless noted otherwise below.
When you configure an HTTP proxy, TclCurl transparently converts operations to HTTP even if you specify an FTP URL or another protocol. This may affect which library features are available. For example, quote and similar FTP-specific features do not work unless you tunnel through the HTTP proxy. Such tunneling is enabled with -proxytunnel.
TclCurl respects the environment variables http_proxy, ftp_proxy,
all_proxy, and others of the same kind, if they are set. Using this
option overrides any such environment variables.
Setting the proxy string to "" explicitly disables proxy use, even if a
corresponding environment variable is set.
The proxy host string can be specified in the same way as the proxy
environment variables, including a protocol prefix such as http:// and
embedded user name and password information.
Since 7.22.0, the proxy string may include a protocol:// prefix to
specify alternative proxy protocols. Use socks4://, socks4a://,
socks5://, or socks5h:// to request a specific SOCKS version. The
last form enables SOCKS5 and asks the proxy to perform name resolution.
If no protocol is specified, and for http:// and all other prefixes,
the proxy is treated as an HTTP proxy.
Use this option to set the proxy port unless it is already specified in
the proxy string passed with -proxy. If not specified, TclCurl uses
port 1080 by default.
Pass the proxy type. Available values are http, http1.0, socks4,
socks4a, socks5, and socks5h. The default is http.
If you set it to http1.0, it will only affect how libcurl speaks to a proxy when CONNECT is used. The HTTP version used for ordinary HTTP requests is instead controlled by httpversion.
Pass a string containing a comma-separated list of hosts that should not
use a proxy, if one is specified. The only wildcard is a single *
character, which matches all hosts and effectively disables the proxy.
Each name in this list is matched either as a domain containing the host
name, or as the host name itself. For example, local.com matches
local.com, local.com:80, and www.local.com, but not
www.notlocal.com.
Set this option to 1 to tunnel all non-HTTP operations through the given HTTP proxy. Using a proxy and tunneling through a proxy are different behaviors. This option should be enabled only when that distinction is required.
Pass the service name. The default service name for a SOCKS5 server is
rcmd/server-fqdn. This option allows you to change it.
Pass 1 to enable this option or 0 to disable it. As part of the
GSSAPI negotiation, a protection mode is negotiated. RFC 1961 specifies in
sections 4.3 and 4.4 that this exchange should be protected, but the NEC
reference implementation does not do so. When enabled, this option allows
the protection mode negotiation to be exchanged unprotected.
Pass the interface name to use as the outgoing network interface. The name may be an interface name, an IP address, or a host name.
Sets the local port number of the socket used for the connection. This can
be used together with -interface, and it is recommended to use
-localportrange as well when this option is set. Valid port numbers
are 1 through 65535.
Number of attempts TclCurl should make to find a working local port
number. It starts with the port specified by -localport and increments
it by one for each retry. Setting this value to 1 or less makes TclCurl
try only one port number. Because port numbers are a limited resource and
may already be in use, setting this value too low may cause unnecessary
connection setup failures.
Pass the timeout in seconds. Name resolution results are kept in memory
for this number of seconds. Set this option to 0 to disable caching
completely, or to -1 to keep cached entries indefinitely. By default,
TclCurl caches this information for 60 seconds.
The name resolution functions in various libc implementations do not re-read name server information unless explicitly told to do so, for example by calling res_init(3). As a result, TclCurl may continue to use older server information even after DHCP has updated it, which may appear to be a DNS cache issue.
If this option is set to 1, TclCurl uses a global DNS cache that
survives the creation and deletion of curl handles. This is not
thread-safe because it relies on a global variable. This option was
deprecated in libcurl v7.11.1 and is disabled by default in the TclCurl
build. See README.md for instructions on how to re-enable it.
WARNING: This option is obsolete. Use the share interface instead. See tclcurl_share.
Pass the preferred size for the TclCurl receive buffer. A smaller buffer may cause the write callback to be invoked more often with smaller chunks. This value is treated as a request, not as a guarantee.
Pass the remote port number to connect to instead of the port specified in the URL or the default port for the protocol in use.
Pass a number to specify whether the TCP_NODELAY option should be set or
cleared (1 = set, 0 = clear). This option is cleared by default. It
has no effect after the connection has been established.
Setting this option will disable TCP’s Nagle algorithm. The purpose of this algorithm is to try to minimize the number of small packets on the network (where “small packets” means TCP segments less than the Maximum Segment Size (MSS) for the network).
Maximizing the amount of data sent per TCP segment is good because it amortizes the overhead of the send. However, in some cases (most notably telnet or rlogin) small segments may need to be sent without delay. This is less efficient than sending larger amounts of data at a time, and can contribute to congestion on the network if overdone.
Pass a number specifying the scope_id value to use when connecting to
IPv6 link-local or site-local addresses.
Set this option to make TclCurl scan your ~/.netrc file for the user
name and password of the remote site you are about to access. TclCurl does
not verify that the file has the correct properties set, as the standard
Unix ftp client does. Only machine name, user name, and password are
taken into account; init macros and similar entries are not supported.
Accepted values:
optionalUndefined values for this option have the same effect.
ignoredrequiredPass a string containing the full path name of the file to use as the
.netrc file. For this option to work, you must set -netrc to
required. If this option is omitted and -netrc is set, TclCurl
attempts to find a .netrc file in the current user’s home directory.
Pass a string in the form [username]:[password] to use for the
connection. Use -httpauth to select the authentication method.
When using NTLM, you can specify a domain by prepending it to the user
name and separating the domain and name with a forward slash (/) or
backward slash (\\), for example domain/user:password or
domain\\user:password. Some HTTP servers on Windows also support this
form for Basic authentication.
When using HTTP and -followlocation, TclCurl might perform several requests to possibly different hosts. TclCurl will only send this user and password information to hosts using the initial host name (unless -unrestrictedauth is set), so if TclCurl follows locations to other hosts it will not send the user and password to those. This is enforced to prevent accidental information leakage.
Pass a string in the form [username]:[password] to use for the
connection to the HTTP proxy.
Pass a string containing the user name to use for the transfer. It sets the user name used in protocol authentication. This option should not be used together with the older -userpwd option.
To specify the password to use together with the user name, use the -password option.
Pass a string containing the password to use for the transfer.
This option should be used together with -username.
Pass a string containing the user name to use for the transfer while connecting to the proxy.
This option is used in the same way as -proxyuserpwd, except that it
allows the user name to contain a colon, as in
sip:user@example.com.
-proxyusername is an alternative way to set the user name while connecting to the proxy. It should not be used together with -proxyuserpwd.
Pass a string containing the password to use for the transfer while connecting to the proxy. This option is intended to be used together with -proxyusername.
Set this option to the authentication method to use. Accepted values are:
basicdigestdigestiegssnegotiateNegotiate, was designed by Microsoft and is used in Microsoft web
applications. It is primarily intended to support Kerberos 5
authentication, but it may also be used with other authentication
methods.
ntlmntlmwb/usr/bin/ntlm_auth.
Note that libcurl will fork when necessary to run the winbind application and kill it when complete, calling waitpid() to await its exit when done. On POSIX operating systems, killing the process will cause a SIGCHLD signal to be raised (regardless of whether -nosignal is set). This behavior is subject to change in future versions of libcurl.
anyanysafeSelects the authentication method to use for TLS authentication.
Accepted values:
tlsauthsrplibcurl must be built with GnuTLS or with OpenSSL support for TLS-SRP for this to work.
Pass a string containing the user name to use for the TLS authentication method specified with -tlsauthtype. This option requires -tlsauthpassword to be set as well.
Pass a string containing the password to use for the TLS authentication method specified with -tlsauthtype. This option requires -tlsauthusername to be set as well.
Use this option to tell TclCurl which authentication method to use for proxy authentication. For some methods, this causes an extra network round trip. Set the actual user name and password with -proxyuserpwd.
The methods are those listed above for the httpauth option. As of this writing, only Basic and NTLM work.
Set this option to 1 to enable automatic updates of the Referer:
header when TclCurl follows a Location: redirect.
Sets the contents of the Accept-Encoding: header sent in an HTTP
request, and enables decoding of a response when a Content-Encoding:
header is received.
Accepted values:
identitydeflategzipallAccept-Encoding: header containing all supported
encodings.
This is a request, not a requirement; the server may or may not honor it.
This option must be set or any unsolicited encoding used by the server is
ignored. See lib/README.encoding in the libcurl documentation for
details.
Adds a request for compressed Transfer-Encoding in the outgoing HTTP
request. If the server supports this and chooses to use it, the response
may use a compressed Transfer-Encoding, which TclCurl then decompresses
automatically when receiving the data.
Transfer-Encoding differs from the Content-Encoding requested with
-encoding in that Transfer-Encoding applies strictly to the
transfer and therefore must be decoded before the data reaches the client.
Traditionally, Transfer-Encoding has been used less widely and is less
consistently supported by HTTP clients and servers.
Set this option to 1 to make TclCurl follow any
Location: header
sent by the server as part of an HTTP response.
TclCurl resends the request to the new location and continues to follow
further Location: headers until no more are returned. Use
-maxredirs to limit the number of redirects TclCurl follows.
Since 7.19.4, TclCurl can also restrict which protocols it follows
automatically. The accepted protocols are set with -redirprotocols.
By default, the FILE protocol is excluded.
Set this option to 1 to allow TclCurl to continue sending authentication
credentials when following redirects, even if the host name changes. This
option is meaningful only when -followlocation is enabled.
Sets the redirection limit. After that many redirects have been followed,
the next redirect causes an error. This option is meaningful only when
-followlocation is enabled. Set the limit to 0 to refuse all
redirects. Set it to -1 for an unlimited number of redirects, which is
the default.
Controls how TclCurl acts on redirects after POST requests that receive a
301, 302, or 303 response. Accepted values are 301, 302, 303,
and all. The values 301, 302, and 303 make TclCurl preserve the
POST request method for the corresponding redirect status code. The value
all enables all three behaviors.
The non-RFC behavior is common in web browsers, so TclCurl performs this conversion by default to maintain consistency. However, a server may require a POST to remain a POST after such a redirection.
This option is meaningful only when -followlocation is enabled.
The legacy alias -post301 is accepted for compatibility and uses the same values.
Set this option to 1 to make TclCurl upload a file using HTTP PUT. The
file to upload must be specified with -infile and -infilesize.
This option is deprecated as of version 0.12.1. Use -upload.
This option does not limit how much data TclCurl will actually send, as that is controlled entirely by what the read callback returns.
Set this option to 1 to make TclCurl perform a regular HTTP POST
request using the application/x-www-form-urlencoded format commonly used
by HTML forms. Use -postfields to specify the data to post and
-postfieldsize to specify its size.
Use the -postfields option to specify what data to post and
-postfieldsize to set the data size. Optionally, you can also provide
POST data using -readproc.
You can override the default POST Content-Type: header by setting your own
with -httpheader.
Using POST with HTTP 1.1 implies the use of an Expect: 100-continue
header. You can disable this header with -httpheader as usual.
If you use POST with an HTTP 1.1 server, you can send data without
knowing the size in advance by using chunked encoding. Enable this by
adding a header such as Transfer-Encoding: chunked with -httpheader.
With HTTP 1.0, or without chunked transfer encoding, you must specify the
size in the request.
Setting -post to 1 also sets -nobody to 0.
NOTE: If you have issued a POST request and later want to make a
HEAD or GET request instead, you must explicitly select the new
request type with -nobody, -httpget, or a similar option.
Pass a string containing the complete data to send in an HTTP POST
request. You must ensure that the data is formatted exactly as you want
the server to receive it. TclCurl does not convert or encode it for you.
Most web servers assume this data is URL-encoded.
This is the normal application/x-www-form-urlencoded form, which is the most
commonly used one by HTML forms.
If you want to do a zero-byte POST, you need to set -postfieldsize
explicitly to zero, because setting -postfields to NULL or ""
effectively disables sending the specified string. TclCurl then assumes
that the POST data is supplied through the read callback.
Using POST with HTTP 1.1 implies the use of an Expect: 100-continue
header. You can disable this header with -httpheader as usual.
NOTE: To make multipart/form-data posts, see -httppost.
Use this option to post data without letting TclCurl call strlen() to
determine the data size. This is also required if you want to post fully
binary data, which would otherwise likely fail. If this size is set to
zero, the library uses strlen() to determine the data size.
Makes TclCurl perform an HTTP multipart/form-data POST request. The
data to send is described through a Tcl list.
This is the only case where the data is reset after a transfer.
Each part consists of at least a NAME and a CONTENTS part. If the part is used for file upload, it may also contain CONTENT-TYPE and FILENAME information.
The list must contain a ‘name’ tag followed by the section name. The
section value can then be described with ‘value’, followed by a string
containing the data to post, ‘file’, followed by the name of the file
to post, or ‘contenttype’, followed by the content type
(text/plain, image/jpg, and so on). You can also supply an alternate
file name with ‘filename’. This is useful if the server checks whether
the provided file name is valid, or if you want to include the full path
of the file being posted. You can also post the contents of a variable as
if it were a file by using ‘bufferName’ and ‘buffer’, or use
‘filecontent’ followed by a file name to read that file and use its
contents as data.
To specify additional headers for a form section, use ‘contentheader’ followed by a list of headers.
See httpPost.tcl and httpBufferPost.tcl for examples.
Return values:
1234567Pass a string to set the Referer: header in the HTTP request sent to the
remote server.
The Referer: header identifies the resource from which the target URI
was obtained. Servers may use it for logging, analytics, backlink
generation, caching decisions, or request-flow checks.
This option is useful when a scripted client must reproduce the request context normally sent by a web browser, or when a server expects a specific referring URI.
The header value should normally be a URI identifying the referring
resource. Fragments and userinfo components are not part of a valid
Referer: field value.
The field name Referer is a historical misspelling of referrer, but
the misspelled form is the standardized HTTP header name.
Because this header may reveal navigation context or sensitive URI data, it should be set with care. It should not be relied upon as a secure means of authentication or access control.
You can also set this header through -httpheader.
Pass a string to set the User-Agent: header in the HTTP request sent to
the remote server. You can also set custom headers with -httpheader.
Pass a list of HTTP headers to send in the request. If you add a header
that TclCurl would otherwise generate internally, your header is used
instead. If you add a header with no value, such as Accept:, the
internal header is disabled. This option can therefore be used to add,
replace, or remove internal headers.
This option is useful when the request must include headers not exposed by
dedicated TclCurl options, or when you need exact control over the final
HTTP request. Common uses include setting custom authentication-related
headers, API-specific headers, cache-control directives, or overriding
headers such as Content-Type: or Accept:.
The headers in the list must not be CRLF-terminated, because TclCurl adds CRLF after each header item. If you include CRLF yourself, the server will likely ignore part of the headers you specified.
The first line of a request, containing the method, usually GET or
POST, is not a header and cannot be replaced with this option. Only the
lines following the request line are headers. Adding the method line to
this list causes an invalid header to be sent.
NOTE: The most commonly replaced headers have dedicated shortcut options: -cookie, -useragent, and -referer.
Pass a list of aliases to be treated as valid HTTP 200 responses. Some
servers return a custom response line. For example, IceCast servers may
return ICY 200 OK. If you include such a string in the list, it is
treated as a valid HTTP status line such as HTTP/1.0 200 OK.
NOTE: The alias itself is not parsed for a version string. Before version 7.16.3, TclCurl used the value set by -httpversion, but since 7.16.3 the protocol is assumed to match HTTP 1.0 when an alias matches.
Pass a string to set a cookie in the HTTP request. The string should use
the format [NAME]=[CONTENTS];, where NAME is the cookie name and
CONTENTS is the cookie value.
If you need to set multiple cookies, you must set them all in a single
option value by concatenating them into one string, for example
name1=content1; name2=content2;.
This option sets the cookie header explicitly in the outgoing request(s). If multiple requests are performed because of authentication, redirects, or similar causes, they all receive this cookie header.
If this option is used multiple times, only the last value is kept.
Pass the name of a file containing cookie data. The cookie data may be in Netscape cookie file format or in regular HTTP-style headers written to a file.
If the file is empty or does not exist, this option still enables cookies for the handle, causing TclCurl to parse received cookies and use matching cookies in later requests.
If you use this option multiple times, each use adds another file to read.
Pass a file name to which TclCurl writes all internally known cookies when
curlHandle cleanup is called. If no cookies are known, no file is
created. Specify - to write the cookies to standard output.
Using this option also enables cookies for the session, so matching cookies are sent on later requests, including those caused by redirects.
TclCurl cannot report an error if writing the cookie jar fails. If -verbose is enabled, a warning is displayed, but that is the only visible feedback in this case.
Set this option to 1 to mark the current run as a new cookie session.
This makes TclCurl ignore session cookies loaded from a previous session.
By default, TclCurl stores and loads all cookies, including session
cookies. Session cookies are cookies without an expiry date and are meant
to exist only for the current session.
Pass a string containing a cookie. The cookie may be in Netscape/Mozilla
format or in regular HTTP-style header form, such as Set-Cookie: ....
If the cookie engine is not enabled, it is enabled automatically.
Special values are ALL, which erases all known cookies, and FLUSH,
which writes all known cookies to the file specified by -cookiejar.
Set this option to 1 to force the HTTP request method back to GET.
This is useful if POST, PUT, or a custom request has previously been
used with the same handle.
Setting -httpget to 1 also sets -nobody to 0.
Selects the HTTP version to use. This option should be used only when it is necessary to override the default behavior because of server-side requirements.
Accepted values:
none1.01.12.02TLS2_PRIOR_KNOWLEDGEUpgrade
first.
Ignores the Content-Length header. This is useful for Apache 1.x and
similar servers, which may report an incorrect content length for files
larger than 2 gigabytes. If this option is used, TclCurl cannot report
progress accurately and stops the download only when the server closes the
connection.
Set this option to 0 to disable content decoding, or to 1 to enable
it. TclCurl does not enable content decoding by default; for that, you
must also use -encoding.
Set this option to 0 to disable transfer decoding, or to 1 to enable
it. The default is 1. TclCurl performs chunked transfer decoding by
default unless this option is disabled.
Pass a string specifying the sender address to use in the SMTP envelope.
This option controls the envelope sender used at the SMTP protocol level.
It does not set or modify the From: header field in the message body.
Pass a list of recipient addresses to use in the SMTP envelope.
This option controls the envelope recipients used at the SMTP protocol
level. It does not set or modify message header fields such as To:,
Cc:, or Bcc:.
In SMTP, recipients are specified with angle brackets (<>). If a
recipient value does not begin with an angle bracket, TclCurl assumes that
it is a plain email address and adds the angle brackets automatically.
Specifies the block size to use for TFTP data transmission. According to
RFC 2348, valid values range from 8 to 65464 bytes. If this option is
not specified, the default block size is 512 bytes.
The requested block size is used only if the remote server supports it. If
the server does not return an option acknowledgment, or if it returns an
acknowledgment without a block size value, the default of 512 bytes is
used.
Pass a string identifying the address to use for the FTP PORT
instruction. The PORT instruction tells the remote server to connect to
the specified client address. The string may be a plain IP address, a host
name, a network interface name on Unix, or simply - to let the library
use the system’s default IP address. By default, FTP transfers are
passive, so PORT is not used.
The address can be followed by : and a port number, optionally followed
by - and a port range. If the port specified is 0, the operating
system chooses a free port. If a range is provided and no port in that
range is available, libcurl reports CURLE_FTP_PORT_FAILED for the
handle. Invalid port or port-range settings are ignored. IPv6 addresses
followed by a port or port range must be enclosed in brackets. IPv6
addresses without a port or port range may also be enclosed in brackets.
Examples:
eth0:0 192.168.1.2:32000-33000 curl.se:32123
[::1]:1234-4567
To disable PORT and return to passive mode, set this option to the empty
string.
Pass a list of FTP or SFTP commands to send to the server before the FTP
transfer request. These commands are sent before any other FTP commands,
including CWD. If you do not want to transfer any files, set
-nobody to 1 and -header to 0.
Prefix a command with an asterisk (*) to make TclCurl continue even if
that command fails. By default, a failure stops the transfer.
To disable this option, set it to the empty string.
The commands must be raw FTP commands. For example, to create a directory
you must send mkd Test, not mkdir Test.
Valid SFTP commands are chgrp, chmod, chown, ln, mkdir, pwd,
rename, rm, rmdir, and symlink.
Pass a list of FTP commands to send to the server after the FTP transfer
request. If you do not want to transfer any files, set -nobody to 1
and -header to 0.
Pass a list of FTP or SFTP commands to send to the server after the transfer type has been set.
Set this option to 1 to list only file names in a directory instead of
requesting a full directory listing with file sizes, dates, and similar
information. This option works with both FTP and SFTP URLs.
For FTP, this causes an NLST command to be sent. Some FTP servers return
only files in response to NLST, and may omit subdirectories and symbolic
links.
Setting this option to 1 also implies a directory listing even if the
URL does not end with a slash, which would otherwise be required.
Do not use this option together with -wildcardmatch, as it effectively disables that feature.
Set this option to 1 to append to the remote file instead of
overwriting it. This is useful only when uploading to an FTP site.
Set this option to 1 to make TclCurl use the EPRT and LPRT commands
for active FTP transfers, which are enabled with -ftpport. When this
option is enabled, TclCurl first attempts EPRT, then LPRT, and only
then falls back to PORT. If this option is set to 0, only PORT is
used.
Set this option to 1 to make TclCurl use the EPSV command for passive
FTP transfers. This is the default behavior. When enabled, TclCurl first
attempts EPSV before using PASV. If this option is set to 0, TclCurl
uses only PASV.
Set this option to 1 to make TclCurl send a PRET command before PASV
or EPSV. Some FTP servers, especially drftpd, require this non-standard
command for directory listings and uploads or downloads in passive mode.
This option has no effect for active FTP transfers.
Controls whether TclCurl should attempt to create a remote directory when
the transfer requires that directory to exist, but a CWD command shows
that it does not yet exist or cannot yet be entered.
This setting also applies to SFTP connections. TclCurl attempts to create the remote directory if it cannot obtain a handle to the target location. Creation fails if a file with the same name already exists, or if permissions do not allow directory creation.
Accepted values:
1CWD, TclCurl attempts to create the missing remote
directory and then continues with the transfer.
2CWD, TclCurl attempts to create the missing remote
directory. If the subsequent MKD command fails, TclCurl retries the
CWD command before giving up. This is useful when multiple
simultaneous connections target the same server and another connection
may have created the directory in the meantime.
Sets a timeout, in seconds, for how long the server may take to return a response to an FTP command before the session is considered hung. While TclCurl is waiting for such a response, this value overrides -timeout. If both options are used, -ftpresponsetimeout should normally be set to a value smaller than -timeout.
Pass a string to use for authentication if the usual FTP USER user and
PASS password negotiation fails. This is known to be required in some
cases when connecting to Tumbleweed Secure Transport FTPS servers that use
client-certificate authentication.
Set this option to 1 to make TclCurl ignore the IP address suggested by
the server in its 227 response to TclCurl’s PASV command when opening
the data connection. TclCurl instead reuses the same IP address already in
use for the control connection, while still using the port number from the
227 response.
This option has no effect if PORT, EPRT, or EPSV is used instead of
PASV.
Selects how TclCurl issues AUTH TLS or AUTH SSL when FTP over SSL is
enabled with -ftpssl.
This option may be needed for servers such as BSDFTPD-SSL, which do not
handle AUTH SSL correctly and require AUTH TLS instead.
Accepted values:
defaultsslAUTH SSL first, and tries AUTH TLS only if that fails.
tlsAUTH TLS first, and tries AUTH SSL only if that fails.
Controls use of CCC (Clear Command Channel). CCC shuts down the SSL/TLS layer after authentication, so the remainder of the control channel is unencrypted. This can allow NAT routers to inspect the FTP control channel.
Accepted values are:
nonepassiveactivePass a string containing account data, or "" to disable it. If an FTP
server requests account data after the user name and password have been
provided, TclCurl sends this value with the ACCT command.
Selects how TclCurl navigates FTP paths. Accepted values are:
multicwdCWD operation for each path
component in the URL. For deep hierarchies this may require many
commands. This is the method described by RFC 1738.
nocwdCWD at all. Instead it sends commands such
as SIZE, RETR, and STOR with the full path.
singlecwdCWD to the full target directory and then
operates on the file normally. This is somewhat more standards
compliant than nocwd, without the full overhead of multicwd.
Set this option to 1 to use ASCII mode for FTP transfers instead of the
default binary transfer mode. On Win32 systems, this does not set
stdout to binary mode. This option can be useful when transferring text
data between systems that treat characters such as newlines differently.
NOTE: TclCurl does not perform full ASCII conversion during ASCII FTP transfers. It simply sets the transfer mode to ASCII and performs a normal transfer.
Set this option to 1 to make TclCurl set the transfer mode, binary or
ASCII, for FTP transfers performed through an HTTP proxy by appending
;type=a or ;type=i to the URL. If this option is omitted or set to
0, -transfertext has no effect for FTP transfers performed through
an HTTP proxy. Not all proxies support this feature.
Set this option to 1 to make TclCurl convert Unix newlines to CRLF
newlines during transfers. Set it to 0 to disable this behavior.
Pass a string specifying the requested range. The format is X-Y, where
either X or Y may be omitted. HTTP transfers also support multiple
ranges separated by commas, as in X-Y,N-M. When multiple ranges are
requested over HTTP, the server returns the response document in pieces
using standard MIME separation rules.
Range requests are supported only for HTTP, FTP, and FILE transfers.
Pass the offset, in bytes, at which the transfer should start. Set this
option to 0 to start the transfer from the beginning, which disables
resume behavior.
For FTP, set this option to -1 to start from the end of the target
file, which is useful when continuing an interrupted upload.
For FTP uploads, the resume position specifies where in the local source file TclCurl should resume reading. The data read from that point is then appended to the remote target file.
Pass a string containing the request method to use instead of the default
method, such as GET or HEAD, when making an HTTP request. This is
useful for methods such as DELETE and other less common HTTP requests.
Use this option only when the server is known to support the specified
method.
TclCurl still behaves internally according to the type of request it would
otherwise have used. As a result, changing the request method with this
option can produce inconsistent behavior if the corresponding request type
is not selected through the usual dedicated option. For example, to make a
proper HEAD request, use -nobody. To make a proper POST request,
use -post or -postfields.
Set this option to 1 to make TclCurl attempt to obtain the modification
time of the remote document during the transfer. This requires the remote
server either to send the time directly or to support a command for
querying it. After the transfer, the filetime value can be retrieved
with the getinfo procedure.
For FTP transfers, this typically means that the server must support a
command for querying the remote file modification time, such as MDTM.
If the server does not provide this information, the transfer can still
succeed, but the retrieved filetime value remains unknown.
Set this option to 1 to omit the body from the output. This is relevant
only for protocols that distinguish between a header part and a body part.
For HTTP and HTTPS, this causes TclCurl to issue a HEAD request.
To change the request back to GET, use -httpget. To switch to
POST, use -post or a related option.
Use this option when uploading a file to specify the expected size of the input file.
This option is mandatory for uploads performed with SCP.
Set this option to 1 to prepare for an upload. The -infile and
-infilesize options are also relevant for uploads. If the protocol
is HTTP, uploading means using the PUT request unless you tell TclCurl
otherwise.
Using PUT with HTTP 1.1 implies the use of a “Expect: 100-continue” header. You can disable this header with -httpheader as usual.
If you use PUT to a HTTP 1.1 server, you can upload data without knowing the size before starting the transfer if you use chunked encoding. You enable this by adding a header like “Transfer-Encoding: chunked” with -httpheader. With HTTP 1.0 or without chunked transfer, you must specify the size.
This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and error ‘filesize exceeded’ (63) will be returned.
NOTE: The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers.
Defines how the timevalue value is treated. Accepted values are
ifmodsince and ifunmodsince. This feature applies to HTTP, FTP, and
FILE.
This should be the time in seconds since 1 jan 1970, and the time will be used in a condition as specified with timecondition.
Pass the maximum time, in seconds, that a TclCurl transfer operation may take. Name resolution alone may take a noticeable amount of time, so setting this value too low can abort otherwise normal operations.
This option may cause libcurl to use SIGALRM to interrupt blocking
system calls. On Unix-like systems, signals may therefore be used unless
-nosignal is enabled.
Like -timeout, but takes a value in milliseconds. If libcurl is built to use the standard system name resolver, name resolution still uses full-second timeout granularity.
Pass the speed, in bytes per second, below which the transfer rate must remain during -lowspeedtime seconds before TclCurl considers the transfer too slow and aborts it.
Pass the number of seconds during which the transfer speed must stay below -lowspeedlimit before TclCurl considers the transfer too slow and aborts it.
Pass a speed in bytes per second. If an upload exceeds this average speed during the transfer, TclCurl pauses the transfer as needed to keep the average rate less than or equal to the specified value. The default is unlimited speed.
Pass a speed in bytes per second. If a download exceeds this average speed during the transfer, TclCurl pauses the transfer as needed to keep the average rate less than or equal to the specified value. The default is unlimited speed.
Sets the size of the persistent connection cache for protocols that support
persistent connections. This value is the maximum number of simultaneous
connections TclCurl may cache in the easy handle. The default is 5.
When the maximum is reached, TclCurl closes the oldest cached connection to prevent the number of open connections from increasing further.
NOTE: If transfers have already been performed with this easy handle, reducing -maxconnects may cause existing open connections to be closed earlier than expected.
If this easy handle is added to a multi handle, this setting is ignored. In that case, configure the corresponding maxconnects option on the multi handle instead.
Pass the maximum time, in seconds, that the connection phase may take.
This limits only the time required to establish the connection. Once the
connection has been established, this option no longer applies. Set it to
0 to disable the connection timeout.
On Unix-like systems, signals may be used unless -nosignal is enabled.
Like -connecttimeout, but takes a value in milliseconds. If libcurl is built to use the standard system name resolver, name resolution still uses full-second timeout granularity.
Selects which IP address families may be used when resolving host names. This option is relevant only when a host name resolves to more than one IP version.
Accepted values are:
whateverv4v6Pass a list of host name resolution entries to use for requests made with this handle.
Each entry must use the format HOST:PORT:ADDRESS, where HOST is the
name TclCurl tries to resolve, PORT is the destination service port, and
ADDRESS is the numeric IP address to use. If libcurl supports IPv6,
ADDRESS may be either an IPv4 or an IPv6 address.
This option effectively pre-populates the DNS cache with entries for a
given HOST:PORT pair, so redirects and other requests to the same
HOST:PORT use the supplied ADDRESS.
To remove an entry from the DNS cache, include a string in the form
-HOST:PORT. The host name must be prefixed with a dash, and both the
host name and port must exactly match an entry added earlier.
Selects the desired level of SSL or TLS use for the transfer. This option is relevant for protocols such as FTP, SMTP, POP3, and IMAP.
You can also use ftps:// URLs to enable SSL/TLS explicitly for both the
control connection and the data connection.
Accepted values:
nopetrycontroluse ssl failed
(64).
alluse ssl failed (64).
Pass a string containing the file name of the certificate to use. The
default format is PEM, and it can be changed with -sslcerttype.
When libcurl is built against NSS, this value is the nickname of the
certificate to use for authentication. To use a file in the current
directory in that case, prefix it with ./ to avoid confusion with a
nickname.
Pass a string specifying the format of the certificate given with -sslcert.
Accepted values are:
PEMDERPass a string containing the file name of the private key to use. The
default format is PEM, and it can be changed with -sslkeytype.
Pass a string specifying the format of the private key given with -sslkey.
Accepted values are:
PEMDERENGNOTE: The DER private-key format may not work with some OpenSSL
versions because of upstream limitations.
Pass a string containing the passphrase required to use the private key specified with -sslkey or -sshprivatekeyfile.
A passphrase is not needed to load a certificate itself, but it may be needed to load the corresponding private key.
This option was formerly known as -sslkeypasswd and -sslcertpasswd.
Pass a string containing the identifier of the crypto engine to use for private-key operations.
NOTE: If the crypto engine cannot be loaded, TclCurl returns an error.
Set this option to 1 to make the selected crypto engine the default for
asymmetric cryptographic operations.
NOTE: If the crypto engine cannot be made the default, TclCurl returns an error.
Selects the SSL or TLS protocol version to use.
Accepted values are:
defaulttlsv1sslv2sslv3tlsv1_0tlsv1_1tlsv1_2tlsv1_3maxdefaultmaxtlsv1_0maxtlsv1_1maxtlsv1_2maxtlsv1_3Controls whether TclCurl verifies the authenticity of the peer
certificate. Set this option to 1 to enable verification or to 0 to
disable it. The default is 1.
During the SSL or TLS handshake, the server sends a certificate declaring its identity. TclCurl verifies that certificate against a chain of trust rooted in one or more certification authority (CA) certificates.
TclCurl uses the default CA bundle provided by libcurl, but you can specify alternate certificates with -cainfo or -capath.
If -sslverifypeer is nonzero and verification fails, the connection
fails. If this option is 0, peer-certificate verification is skipped.
Certificate verification alone does not confirm that the peer is the specific host you intended to contact. Use -sslverifyhost to control host-name verification.
Pass the name of a file containing one or more CA certificates used to verify the peer certificate.
This option is meaningful primarily together with -sslverifypeer. If peer verification is disabled, -cainfo does not need to name an accessible file.
By default, this option is set to the system path of libcurl’s CA bundle, as determined when libcurl was built.
When libcurl is built against NSS, this value refers to the directory containing the NSS certificate database.
Pass the name of a file containing a CA certificate in PEM format. If this option is set, an additional check is performed to verify that the peer certificate was issued by the CA certificate provided here.
This is useful in multi-level PKI environments where the peer certificate must be constrained to a specific branch of the certificate hierarchy.
This option is meaningful only when used together with -sslverifypeer. Otherwise, failure of this additional check is not treated as a connection failure.
Pass the name of a directory containing multiple CA certificates to use when verifying the peer certificate.
When libcurl is built against OpenSSL, this directory must be prepared
with the openssl c_rehash utility. This option is meaningful primarily
together with -sslverifypeer. If peer verification is disabled,
-capath does not need to name an accessible directory.
This option is OpenSSL-specific and has no effect when libcurl is built against GnuTLS. NSS-based libcurl provides it only for backward compatibility.
On Windows, this option may not work because of OpenSSL limitations.
Pass the name of a file containing one or more certificate revocation lists in PEM format to use during certificate validation.
When libcurl is built against NSS or GnuTLS, there is no supported way to
influence revocation checking with this option. When libcurl is built with
OpenSSL support, both X509_V_FLAG_CRL_CHECK and
X509_V_FLAG_CRL_CHECK_ALL are enabled if a CRL file is provided, so CRL
checking is applied throughout the certificate chain.
This option is meaningful only when used together with -sslverifypeer.
If the CRL file cannot be loaded, the SSL exchange fails with the specific
error code CURLE_SSL_CRL_BADFILE. A certificate-verification failure
caused by revocation information in the CRL does not produce that specific
error code.
Controls whether TclCurl verifies that the server certificate matches the host name you intended to contact.
During the SSL or TLS handshake, the server sends a certificate declaring its identity.
When -sslverifyhost is set to 2, the certificate must identify the
intended server or the connection fails. TclCurl considers the server to
match when the Common Name field or a Subject Alternative Name field in
the certificate matches the host name in the URL.
When this option is set to 1, the certificate must contain a Common Name
field, but the specific name is not checked. This setting is generally not
useful.
When this option is set to 0, the connection succeeds regardless of the
names contained in the certificate.
The default value is 2.
This option verifies the host identity claimed by the certificate. To
verify that the certificate itself is trusted, use -sslverifypeer. If
libcurl is built against NSS and -sslverifypeer is 0,
-sslverifyhost is ignored.
Set this option to 1 to enable collection of certificate-chain
information. When enabled, TclCurl, if built against OpenSSL, extracts
certificate details from the chain used in the SSL connection.
That information can be retrieved after the transfer with the getinfo
command and its certinfo option.
Pass a file name. TclCurl uses this file as a source of randomness for the
SSL random engine. This option was deprecated in libcurl v7.84 and is
disabled by default in the TclCurl build. See README.md for instructions
on how to re-enable it.
Pass the path name of an Entropy Gathering Daemon socket. TclCurl uses it
as a source of randomness for the SSL random engine. This option was
deprecated in libcurl v7.84 and is disabled by default in the TclCurl
build. See README.md for instructions on how to re-enable it.
Pass a string containing the cipher list to use for the SSL or TLS
connection. The list consists of one or more cipher strings separated
normally by colons, although commas or spaces are also accepted. The
characters !, -, and + may also be used as operators.
With OpenSSL and GnuTLS, valid examples include RC4-SHA, SHA1+DES,
TLSv1, and DEFAULT. The default list is usually defined by the SSL
backend at build time.
With NSS, valid examples include rsa_rc4_128_md5 and
rsa_aes_128_sha. NSS does not support incremental add or remove
semantics for ciphers. If this option is used, all known ciphers are
disabled and only the ciphers listed here are enabled.
For details about cipher-list syntax, see: http://www.openssl.org/docs/apps/ciphers.html
For NSS-specific cipher-list details, see: http://directory.fedora.redhat.com/docs/mod_nss.html
Set this option to 0 to disable TclCurl’s use of SSL session-ID caching,
or to 1 to enable it. The default is 1.
In normal circumstances, reusing SSL session IDs is harmless and may improve performance. However, some broken SSL implementations may require this option to be disabled.
Selects the Kerberos security level for FTP and thereby also enables Kerberos awareness.
Accepted values are clear, safe, confidential, and private. If
the string does not match one of these values, private is used.
Set the string to NULL to disable Kerberos 4. Set it to "" to disable
Kerberos support for FTP.
Selects the GSSAPI credential delegation mode.
Accepted values are:
flagpolicyflagOK-AS-DELEGATE flag is set in the service
ticket, provided that this feature is supported by the GSSAPI
implementation and that GSS_C_DELEG_POLICY_FLAG was available at
compile time.
Delegation is disabled by default since 7.21.7.
Selects the allowed SSH authentication types.
Accepted values are:
publickeypasswordhostkeyboardanyPass a string containing 32 hexadecimal digits. The string must be the 128-bit MD5 checksum of the remote host public key. TclCurl rejects the connection unless the checksum matches.
This option applies only to SCP and SFTP transfers.
Pass the file name of the public key to use.
If this option is not used, TclCurl defaults to $HOME/.ssh/id_dsa.pub
when the HOME environment variable is set, and to id_dsa.pub in the
current directory otherwise.
Pass the file name of the private key to use.
If this option is not used, TclCurl defaults to $HOME/.ssh/id_dsa when
the HOME environment variable is set, and to id_dsa in the current
directory otherwise.
If the private key is passphrase-protected, use -keypasswd to specify the passphrase.
Pass a string containing the file name of the known_hosts file to use.
The file must use the OpenSSH known_hosts format supported by libssh2.
If this option is set, TclCurl accepts connections only to hosts that are present in that file with a matching public key. Use -sshkeyproc to override the default behavior for host and key matching.
Pass the name of a callback procedure that TclCurl invokes after
known_hosts matching has been performed, so that the application can
decide how the connection should proceed.
The callback is invoked only if -sshknownhosts is also set.
The callback receives a list with three elements:
known_hosts file and the key
itself.Possible key-type values are rsa, rsa1, dss, and unknown.
Possible match-result values are match, mismatch, missing, and
error.
Return values:
0known_hosts file before continuing with the connection. If the host
and key are not already present in the in-memory known-hosts pool,
TclCurl also adds them there. Updating the file is done by replacing
it with a new copy, so the file permissions must allow that.
123Any other return value causes TclCurl to close the connection.
Name of the Tcl array variable in which TclCurl stores the headers returned by the server.
Name of the Tcl variable in which TclCurl stores the requested file contents. The stored data may be either text or binary data.
Name of a Tcl variable used together with -progressproc. If the
progress callback sets this variable to 1, the transfer is canceled.
Executes the given command after the transfer has completed.
This option works only with blocking transfers and therefore has limited practical use.
Pass a share handle. The share handle must have been created previously by calling curl::shareinit.
Setting this option causes the easy handle to use data from the shared handle instead of keeping its own separate copy. See tclcurl_share for details.
Pass a numeric value specifying the permissions assigned to newly created
files on the remote server. The default value is 0644, but any valid
value may be used.
This option applies only to sftp://, scp://, and file:// transfers.
Pass a numeric value specifying the permissions assigned to newly created
directories on the remote server. The default value is 0755, but any
valid value may be used.
This option applies only to sftp://, scp://, and file:// transfers.
Some of the options libcurl offers are not supported, I don’t think them worth supporting in TclCurl but if you need one of them don’t forget to complain:
CURLOPTFRESHCONNECT, CURLOPTFORBIDREUSE, CURLOPT_PRIVATE,
CURLOPTSSLCTXFUNCTION, CURLOPTSSLCTXDATA, CURLOPTSSLCTX_FUNCTION and
CURLOPTCONNECTONLY, CURLOPTOPENSOCKETFUNCTION, CURLOPTOPENSOCKETDATA.
This procedure is called after the
init
and all the
configure
calls are made, and will perform the transfer as described in the options.
It must be called with the same curlHandle curl::init call returned. You can do any amount of calls to perform while using the same handle. If you intend to transfer more than one file, you are even encouraged to do so. TclCurl will then attempt to re-use the same connection for the following transfers, thus making the operations faster, less CPU intense and using less network resources. Just note that you will have to use configure between the invokes to set options for the following perform.
You must never call this procedure simultaneously from two places using the same handle. Let it return first before invoking it another time. If you want parallel transfers, you must use several curl handles.
0 if all went well, non-zero if it didn’t. In case of error, if the
errorbuffer was set with configure there will be a readable error message.
The error codes are:
Request internal information from the curl session with this procedure. This procedure is intended to get used AFTER a performed transfer, and can be relied upon only if the perform returns 0. Use this function AFTER a performed transfer if you want to get transfer-oriented data.
The following information can be extracted:
Returns the last used effective URL.
Returns the last received HTTP or FTP code. This will be zero if no server response code has been received. Note that a proxy’s CONNECT response should be read with httpconnectcode and not this.
Returns the last received proxy response code to a CONNECT request.
Returns the remote time of the retrieved document (in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get -1, it can be because of many reasons (unknown, the server hides it or the server doesn’t support the command that tells document time etc) and the time of the document is unknown.
In order for this to work you have to set the -filetime option before the transfer.
Returns the time, in seconds, it took from the start until the name resolving was completed.
Returns the time, in seconds, it took from the start until the connect to the remote host (or proxy) was completed.
Returns the time, in seconds, it took from the start until the SSL/SSH connect/handshake to the remote host was completed. This time is most often very near to the PRETRANSFER time, except for cases such as HTTP pippelining where the pretransfer time can be delayed due to waits in line for the pipeline and more.
Returns the time, in seconds, it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.
Returns the time, in seconds, it took from the start until the first byte is just about to be transferred. This includes the pretransfertime, and also the time the server needs to calculate the result.
Returns the total transaction time, in seconds, for the previous transfer, including name resolving, TCP connect etc.
Returns the URL a redirect would take you to if you enable followlocation. This can come very handy if you think using the built-in libcurl redirect logic isn’t good enough for you but you would still prefer to avoid implementing all the magic of figuring out the new URL.
Returns the total time, in seconds, it took for all redirection steps including name lookup, connect, pretransfer and transfer before the final transaction was started, it returns the complete execution time for multiple redirections, so it returns zero if no redirections were needed.
Returns the total number of redirections that were actually followed.
Returns how many new connections TclCurl had to create to achieve the previous transfer (only the successful connects are counted). Combined with redirectcount you are able to know how many times TclCurl successfully reused existing connection(s) or not. See the Connection Options of setopt to see how TclCurl tries to make persistent connections to save time.
Returns the IP address of the most recent connection done with this handle. This string may be IPv6 if that’s enabled.
Returns the destination port of the most recent connection done with this handle.
Returns the local (source) IP address of the most recent connection done with this handle. This string may be IPv6 if that’s enabled.
Returns the local (source) port of the most recent connection done with this handle.
Returns the total amount of bytes that were uploaded.
Returns the total amount of bytes that were downloaded. The amount is only for the latest transfer and will be reset again for each new transfer.
Returns the average download speed, measured in bytes/second, for the complete download.
Returns the average upload speed, measured in bytes/second, for the complete upload.
Returns the total size in bytes of all the headers received.
Returns the total size of the issued requests. This is so far only for HTTP requests. Note that this may be more than one request if followLocation is true.
Returns the result of the certification verification that was requested (using the -sslverifypeer option to configure).
Returns a list of the OpenSSL crypto-engines supported. Note that engines are normally implemented in separate dynamic libraries. Hence not all the returned engines may be available at run-time.
Returns the content-length of the download. This is the value read from the Content-Length: field. If the size isn’t known, it returns -1.
Returns the specified size of the upload.
Returns the content-type of the downloaded object. This is the value read from the Content-Type: field. If you get an empty string, it means the server didn’t send a valid Content-Type header or that the protocol used doesn’t support this.
Returns a list with the authentication method(s) available.
Returns a list with the authentication method(s) available for your proxy athentication.
Returns the errno value from a connect failure. This value is only set on failure, it is no reset after a successful operation.
Returns a list of all cookies TclCurl knows (expired ones, too). If there are no cookies (cookies for the handle have not been enabled or simply none have been received) the list will be empty.
Returns a string holding the path of the entry path. That is the initial path TclCurl ended up in when logging on to the remote FTP server. Returns an empty string if something is wrong.
Returns list with information about the certificate chain, assuming you had the -certinfo option enabled when the previous request was done. The list first item reports how many certs it found and then you can extract info for each of those certs by following the list. The info chain is provided in a series of data in the format “name:content” where the content is for the specific named data.
NOTE: this option is only available in libcurl built with OpenSSL support.
Returns the number 1 if the condition provided in the previous request didn’t match (see timecondition), you will get a zero if the condition instead was met.
This procedure must be the last one to call for a curl session. It is the opposite of the curl::init procedure and must be called with the same curlhandle as input as the curl::init call returned. This will effectively close all connections TclCurl has used and possibly has kept open until now. Don’t call this procedure if you intend to transfer more files.
Re-initializes all options previously set on a specified handle to the default values.
This puts back the handle to the same state as it was in when it was just created with curl::init.
It does not change the following information kept in the handle: live connections, the Session ID cache, the DNS cache, the cookies and shares.
This procedure will return a new curl handle, a duplicate, using all the options previously set in the input curl handle. Both handles can subsequently be used independently and they must both be freed with cleanup.
The new handle will not inherit any state information, connections, SSL sessions or cookies.
You can use this command from within a progress callback procedure to pause the transfer.
Resumes a transfer paused with curlhandle pause
In case you do not want to use persistent connections you can use this command, it takes the same arguments as the curlHandle configure and will init, configure, perform and cleanup a connection for you.
You can also get the getinfo information by using -infooption variable pairs, after the transfer variable will contain the value that would have been returned by $curlHandle getinfo option.
Returns a string with the version number of tclcurl, libcurl and some of its important components (like OpenSSL version).
This procedure will convert the given input string to an URL encoded string and return that. All input characters that are not a-z, A-Z or 0-9 will be converted to their “URL escaped” version (%NN where NN is a two-digit hexadecimal number)
This procedure will convert the given URL encoded input string to a “plain string” and return that. All input characters that are URL encoded (%XX where XX is a two-digit hexadecimal number) will be converted to their plain text versions.
Returns some information about how you have cURL installed.
Returns information about various run-time features in TclCurl.
Applications should use this information to judge if things are possible to do or not, instead of using compile-time checks, as dynamic/DLL libraries can be changed independent of applications.
Returns the version of libcurl we are using.
Returns the version of libcurl we are using in hexadecimal with 8 bits for each part; major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl 12.13.14 would appear as 0c0d0e… Note that the initial zero might be omitted.
Returns a string with the host information as discovered by a configure script or set by the build environment.
Returns a list with the features compiled into libcurl, the possible elements are:
Libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (even on Windows) and less blocking when using the multi interface.
Libcurl was built with support for character conversions.
Libcurl was built with extra debug capabilities built-in. This is mainly of interest for libcurl hackers.
Supports HTTP GSS-Negotiate.
Supports IDNA, domain names with international letters.
Supports IPv6.
Supports kerberos4 (when using FTP).
Libcurl was built with support for large files.
Supports HTTP deflate using libz.
Supports HTTP NTLM
Libcurl was built with support for SPNEGO authentication (Simple and Protected GSS-API Negotiation Mechanism, defined in RFC 2478)
Supports SSL (HTTPS/FTPS)
Libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for NTLM authentication. It also allows libcurl to use the current user and the current user’s password without the app having to pass them on.
Libcurl was built with support for TLS-SRP.
NTLM_WB
Libcurl was built with support for NTLM delegation to a winbind helper.
Do not assume any particular order.
Returns a string with the OpenSSL version used, like OpenSSL/0.9.6b.
Returns the numerical OpenSSL version value as defined by the OpenSSL project. If libcurl has no SSL support, this is 0.
Returns a string, there is no numerical version, for example: 1.1.3.
Lists what particular protocols the installed TclCurl was built to support. At the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols will be listed using uppercase. There may be none, one or several protocols in the list.
This procedure returns a string describing the error code passed in the argument.
The examples in this section assume you are running from the root of the TclCurl source tree.
To start the local HTTP test server used in the examples, run:
tclsh testservers/testserver.tcl
By default, this starts an HTTP server on http://127.0.0.1:8990/.
The path http://127.0.0.1:8990/tclcurl-man returns the HTML version of this
manual page from doc/tclcurl.html, which makes it a convenient target for a
basic GET example.
The file examples/http_get.tcl contains a minimal HTTP GET example. It
performs a simple request, stores the response body in a Tcl variable, and
prints both the HTTP response code and the size of the returned document.
If the request succeeds, rc is 0, responsecode is 200, and body
contains the HTML document returned by the server.
Andres Garcia Garcia
Massimo Manghi
curl, The art of HTTP scripting (at http://curl.haxx.se), RFC 2396,