docs: use lowercase curl and libcurl
Adjusted badwords to find them. Plus: make badwords run on all markdown files in the repo and update markdowns previously unchecked Closes #15898
This commit is contained in:
parent
e694c8284a
commit
3eb57d6ba7
14
.github/scripts/badwords.pl
vendored
14
.github/scripts/badwords.pl
vendored
@ -8,13 +8,21 @@
|
|||||||
# If separator is '=', the string will be compared case sensitively.
|
# If separator is '=', the string will be compared case sensitively.
|
||||||
# If separator is ':', the check is done case insensitively.
|
# If separator is ':', the check is done case insensitively.
|
||||||
#
|
#
|
||||||
|
# To add white listed uses of bad words that are removed before checking for
|
||||||
|
# the bad ones:
|
||||||
|
#
|
||||||
|
# ---(accepted word)
|
||||||
|
#
|
||||||
my $w;
|
my $w;
|
||||||
while(<STDIN>) {
|
while(<STDIN>) {
|
||||||
chomp;
|
chomp;
|
||||||
if($_ =~ /^#/) {
|
if($_ =~ /^#/) {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if($_ =~ /^([^:=]*)([:=])(.*)/) {
|
if($_ =~ /^---(.*)/) {
|
||||||
|
push @whitelist, $1;
|
||||||
|
}
|
||||||
|
elsif($_ =~ /^([^:=]*)([:=])(.*)/) {
|
||||||
my ($bad, $sep, $better)=($1, $2, $3);
|
my ($bad, $sep, $better)=($1, $2, $3);
|
||||||
push @w, $bad;
|
push @w, $bad;
|
||||||
$alt{$bad} = $better;
|
$alt{$bad} = $better;
|
||||||
@ -41,6 +49,10 @@ sub file {
|
|||||||
$in =~ s/(\[.*\])\(.*\)/$1/g;
|
$in =~ s/(\[.*\])\(.*\)/$1/g;
|
||||||
# remove backticked texts
|
# remove backticked texts
|
||||||
$in =~ s/\`.*\`//g;
|
$in =~ s/\`.*\`//g;
|
||||||
|
# remove whitelisted patterns
|
||||||
|
for my $p (@whitelist) {
|
||||||
|
$in =~ s/$p//g;
|
||||||
|
}
|
||||||
foreach my $w (@w) {
|
foreach my $w (@w) {
|
||||||
my $case = $exactcase{$w};
|
my $case = $exactcase{$w};
|
||||||
if(($in =~ /^(.*)$w/i && !$case) ||
|
if(($in =~ /^(.*)$w/i && !$case) ||
|
||||||
|
|||||||
5
.github/scripts/badwords.txt
vendored
5
.github/scripts/badwords.txt
vendored
@ -66,3 +66,8 @@ couldn't:could not
|
|||||||
64-bits:64 bits or 64-bit
|
64-bits:64 bits or 64-bit
|
||||||
32-bits:32 bits or 32-bit
|
32-bits:32 bits or 32-bit
|
||||||
\bvery\b:rephrase using an alternative word
|
\bvery\b:rephrase using an alternative word
|
||||||
|
\bCurl\b=curl
|
||||||
|
\bLibcurl\b=libcurl
|
||||||
|
---WWW::Curl
|
||||||
|
---NET::Curl
|
||||||
|
---Curl Corporation
|
||||||
|
|||||||
2
.github/workflows/checkdocs.yml
vendored
2
.github/workflows/checkdocs.yml
vendored
@ -137,7 +137,7 @@ jobs:
|
|||||||
name: checkout
|
name: checkout
|
||||||
|
|
||||||
- name: badwords
|
- name: badwords
|
||||||
run: .github/scripts/badwords.pl < .github/scripts/badwords.txt docs/*.md docs/libcurl/*.md docs/libcurl/opts/*.md docs/cmdline-opts/*.md docs/TODO docs/KNOWN_BUGS tests/*.md
|
run: .github/scripts/badwords.pl < .github/scripts/badwords.txt `git ls-files '**.md'` docs/TODO docs/KNOWN_BUGS packages/OS400/README.OS400
|
||||||
|
|
||||||
- name: verify-synopsis
|
- name: verify-synopsis
|
||||||
run: .github/scripts/verify-synopsis.pl docs/libcurl/curl*.md
|
run: .github/scripts/verify-synopsis.pl docs/libcurl/curl*.md
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Daniel uses a configure line similar to this for easier development:
|
|||||||
|
|
||||||
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
||||||
|
|
||||||
In environments that don't support configure (i.e. Windows), do this:
|
In environments that do not support configure (i.e. Windows), do this:
|
||||||
|
|
||||||
buildconf.bat
|
buildconf.bat
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
# [](https://curl.se/)
|
# [](https://curl.se/)
|
||||||
|
|
||||||
Curl is a command-line tool for transferring data specified with URL syntax.
|
curl is a command-line tool for transferring data specified with URL syntax.
|
||||||
Learn how to use curl by reading [the
|
Learn how to use curl by reading [the
|
||||||
manpage](https://curl.se/docs/manpage.html) or [everything
|
manpage](https://curl.se/docs/manpage.html) or [everything
|
||||||
curl](https://everything.curl.dev/).
|
curl](https://everything.curl.dev/).
|
||||||
@ -55,7 +55,7 @@ page](https://hackerone.com/curl) and not in public.
|
|||||||
|
|
||||||
## Notice
|
## Notice
|
||||||
|
|
||||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga
|
curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga
|
||||||
Tekniska Högskolan. This notice is included here to comply with the
|
Tekniska Högskolan. This notice is included here to comply with the
|
||||||
distribution terms.
|
distribution terms.
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
## There are still bugs
|
## There are still bugs
|
||||||
|
|
||||||
Curl and libcurl keep being developed. Adding features and changing code
|
curl and libcurl keep being developed. Adding features and changing code
|
||||||
means that bugs sneak in, no matter how hard we try to keep them out.
|
means that bugs sneak in, no matter how hard we try to keep them out.
|
||||||
|
|
||||||
Of course there are lots of bugs left. Not to mention misfeatures.
|
Of course there are lots of bugs left. Not to mention misfeatures.
|
||||||
|
|||||||
@ -59,7 +59,7 @@ not be the best solution.
|
|||||||
|
|
||||||
## Using ECH and DoH
|
## Using ECH and DoH
|
||||||
|
|
||||||
Curl supports using DoH for A/AAAA lookups so it was relatively easy to add
|
curl supports using DoH for A/AAAA lookups so it was relatively easy to add
|
||||||
retrieval of HTTPS RRs in that situation. To use ECH and DoH together:
|
retrieval of HTTPS RRs in that situation. To use ECH and DoH together:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -153,7 +153,7 @@ For now, this only works for the OpenSSL and BoringSSL/AWS-LC builds.
|
|||||||
|
|
||||||
## Default settings
|
## Default settings
|
||||||
|
|
||||||
Curl has various ways to configure default settings, e.g. in ``$HOME/.curlrc``,
|
curl has various ways to configure default settings, e.g. in ``$HOME/.curlrc``,
|
||||||
so one can set the DoH URL and enable ECH that way:
|
so one can set the DoH URL and enable ECH that way:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@ -74,7 +74,7 @@ November: configure script and reported successful compiles on several
|
|||||||
major operating systems. The never-quite-understood -F option was added and
|
major operating systems. The never-quite-understood -F option was added and
|
||||||
curl could now simulate quite a lot of a browser. TELNET support was added.
|
curl could now simulate quite a lot of a browser. TELNET support was added.
|
||||||
|
|
||||||
Curl 5 was released in December 1998 and introduced the first ever curl man
|
curl 5 was released in December 1998 and introduced the first ever curl man
|
||||||
page. People started making Linux RPM packages out of it.
|
page. People started making Linux RPM packages out of it.
|
||||||
|
|
||||||
1999
|
1999
|
||||||
@ -187,7 +187,7 @@ June: curl 7.12.0 introduced IDN support. 10 official web mirrors.
|
|||||||
This release bumped the major SONAME to 3 due to the removal of the
|
This release bumped the major SONAME to 3 due to the removal of the
|
||||||
`curl_formparse()` function
|
`curl_formparse()` function
|
||||||
|
|
||||||
August: Curl and libcurl 7.12.1
|
August: curl and libcurl 7.12.1
|
||||||
|
|
||||||
Public curl release number: 82
|
Public curl release number: 82
|
||||||
Releases counted from the beginning: 109
|
Releases counted from the beginning: 109
|
||||||
@ -377,7 +377,7 @@ April: added the cyassl backend (later renamed to wolfSSL)
|
|||||||
curl and libcurl are installed in an estimated 5 *billion* instances
|
curl and libcurl are installed in an estimated 5 *billion* instances
|
||||||
world-wide.
|
world-wide.
|
||||||
|
|
||||||
October 31: Curl and libcurl 7.62.0
|
October 31: curl and libcurl 7.62.0
|
||||||
|
|
||||||
Public curl releases: 177
|
Public curl releases: 177
|
||||||
Command line options: 219
|
Command line options: 219
|
||||||
|
|||||||
@ -115,7 +115,7 @@ matching public key file must be specified using the `--pubkey` option.
|
|||||||
|
|
||||||
### HTTP
|
### HTTP
|
||||||
|
|
||||||
Curl also supports user and password in HTTP URLs, thus you can pick a file
|
curl also supports user and password in HTTP URLs, thus you can pick a file
|
||||||
like:
|
like:
|
||||||
|
|
||||||
curl http://name:passwd@http.server.example/full/path/to/file
|
curl http://name:passwd@http.server.example/full/path/to/file
|
||||||
@ -170,7 +170,7 @@ curl uses HTTP/1.0 instead of HTTP/1.1 for any `CONNECT` attempts.
|
|||||||
|
|
||||||
curl also supports SOCKS4 and SOCKS5 proxies with `--socks4` and `--socks5`.
|
curl also supports SOCKS4 and SOCKS5 proxies with `--socks4` and `--socks5`.
|
||||||
|
|
||||||
See also the environment variables Curl supports that offer further proxy
|
See also the environment variables curl supports that offer further proxy
|
||||||
control.
|
control.
|
||||||
|
|
||||||
Most FTP proxy servers are set up to appear as a normal FTP server from the
|
Most FTP proxy servers are set up to appear as a normal FTP server from the
|
||||||
@ -199,7 +199,7 @@ should be read from STDIN.
|
|||||||
## Ranges
|
## Ranges
|
||||||
|
|
||||||
HTTP 1.1 introduced byte-ranges. Using this, a client can request to get only
|
HTTP 1.1 introduced byte-ranges. Using this, a client can request to get only
|
||||||
one or more sub-parts of a specified document. Curl supports this with the
|
one or more sub-parts of a specified document. curl supports this with the
|
||||||
`-r` flag.
|
`-r` flag.
|
||||||
|
|
||||||
Get the first 100 bytes of a document:
|
Get the first 100 bytes of a document:
|
||||||
@ -210,7 +210,7 @@ Get the last 500 bytes of a document:
|
|||||||
|
|
||||||
curl -r -500 http://www.example.com/
|
curl -r -500 http://www.example.com/
|
||||||
|
|
||||||
Curl also supports simple ranges for FTP files as well. Then you can only
|
curl also supports simple ranges for FTP files as well. Then you can only
|
||||||
specify start and stop position.
|
specify start and stop position.
|
||||||
|
|
||||||
Get the first 100 bytes of a document using FTP:
|
Get the first 100 bytes of a document using FTP:
|
||||||
@ -238,7 +238,7 @@ Upload a local file to get appended to the remote file:
|
|||||||
|
|
||||||
curl -T localfile -a ftp://ftp.example.com/remotefile
|
curl -T localfile -a ftp://ftp.example.com/remotefile
|
||||||
|
|
||||||
Curl also supports ftp upload through a proxy, but only if the proxy is
|
curl also supports ftp upload through a proxy, but only if the proxy is
|
||||||
configured to allow that kind of tunneling. If it does, you can run curl in a
|
configured to allow that kind of tunneling. If it does, you can run curl in a
|
||||||
fashion similar to:
|
fashion similar to:
|
||||||
|
|
||||||
@ -264,7 +264,7 @@ For other ways to do HTTP data upload, see the POST section below.
|
|||||||
|
|
||||||
If curl fails where it is not supposed to, if the servers do not let you in,
|
If curl fails where it is not supposed to, if the servers do not let you in,
|
||||||
if you cannot understand the responses: use the `-v` flag to get verbose
|
if you cannot understand the responses: use the `-v` flag to get verbose
|
||||||
fetching. Curl outputs lots of info and what it sends and receives in order to
|
fetching. curl outputs lots of info and what it sends and receives in order to
|
||||||
let the user see all client-server interaction (but it does not show you the
|
let the user see all client-server interaction (but it does not show you the
|
||||||
actual data).
|
actual data).
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ info on a single file for HTTP and FTP. The HTTP information is a lot more
|
|||||||
extensive.
|
extensive.
|
||||||
|
|
||||||
For HTTP, you can get the header information (the same as `-I` would show)
|
For HTTP, you can get the header information (the same as `-I` would show)
|
||||||
shown before the data by using `-i`/`--include`. Curl understands the
|
shown before the data by using `-i`/`--include`. curl understands the
|
||||||
`-D`/`--dump-header` option when getting files from both FTP and HTTP, and it
|
`-D`/`--dump-header` option when getting files from both FTP and HTTP, and it
|
||||||
then stores the headers in the specified file.
|
then stores the headers in the specified file.
|
||||||
|
|
||||||
@ -407,7 +407,7 @@ contain certain data.
|
|||||||
## User Agent
|
## User Agent
|
||||||
|
|
||||||
An HTTP request has the option to include information about the browser that
|
An HTTP request has the option to include information about the browser that
|
||||||
generated the request. Curl allows it to be specified on the command line. It
|
generated the request. curl allows it to be specified on the command line. It
|
||||||
is especially useful to fool or trick stupid servers or CGI scripts that only
|
is especially useful to fool or trick stupid servers or CGI scripts that only
|
||||||
accept certain browsers.
|
accept certain browsers.
|
||||||
|
|
||||||
@ -456,7 +456,7 @@ Example, get a page that wants my name passed in a cookie:
|
|||||||
|
|
||||||
curl -b "name=Daniel" www.example.com
|
curl -b "name=Daniel" www.example.com
|
||||||
|
|
||||||
Curl also has the ability to use previously received cookies in following
|
curl also has the ability to use previously received cookies in following
|
||||||
sessions. If you get cookies from a server and store them in a file in a
|
sessions. If you get cookies from a server and store them in a file in a
|
||||||
manner similar to:
|
manner similar to:
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ non-existing file to trigger the cookie awareness like:
|
|||||||
curl -L -b empty.txt www.example.com
|
curl -L -b empty.txt www.example.com
|
||||||
|
|
||||||
The file to read cookies from must be formatted using plain HTTP headers OR as
|
The file to read cookies from must be formatted using plain HTTP headers OR as
|
||||||
Netscape's cookie file. Curl determines what kind it is based on the file
|
Netscape's cookie file. curl determines what kind it is based on the file
|
||||||
contents. In the above command, curl parses the header and store the cookies
|
contents. In the above command, curl parses the header and store the cookies
|
||||||
received from www.example.com. curl sends the stored cookies which match the
|
received from www.example.com. curl sends the stored cookies which match the
|
||||||
request to the server as it follows the location. The file `empty.txt` may be
|
request to the server as it follows the location. The file `empty.txt` may be
|
||||||
@ -523,7 +523,7 @@ much explanation!
|
|||||||
|
|
||||||
## Speed Limit
|
## Speed Limit
|
||||||
|
|
||||||
Curl allows the user to set the transfer speed conditions that must be met to
|
curl allows the user to set the transfer speed conditions that must be met to
|
||||||
let the transfer keep going. By using the switch `-y` and `-Y` you can make
|
let the transfer keep going. By using the switch `-y` and `-Y` you can make
|
||||||
curl abort transfers if the transfer speed is below the specified lowest limit
|
curl abort transfers if the transfer speed is below the specified lowest limit
|
||||||
for a specified time.
|
for a specified time.
|
||||||
@ -562,7 +562,7 @@ stalls during periods.
|
|||||||
|
|
||||||
## Config File
|
## Config File
|
||||||
|
|
||||||
Curl automatically tries to read the `.curlrc` file (or `_curlrc` file on
|
curl automatically tries to read the `.curlrc` file (or `_curlrc` file on
|
||||||
Microsoft Windows systems) from the user's home directory on startup.
|
Microsoft Windows systems) from the user's home directory on startup.
|
||||||
|
|
||||||
The config file could be made up with normal command line switches, but you
|
The config file could be made up with normal command line switches, but you
|
||||||
@ -822,7 +822,7 @@ with current logon credentials (SSPI/SPNEGO).
|
|||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
||||||
Curl reads and understands the following environment variables:
|
curl reads and understands the following proxy related environment variables:
|
||||||
|
|
||||||
http_proxy, HTTPS_PROXY, FTP_PROXY
|
http_proxy, HTTPS_PROXY, FTP_PROXY
|
||||||
|
|
||||||
@ -855,7 +855,7 @@ this is a big security risk if someone else gets hold of your passwords,
|
|||||||
therefore most Unix programs do not read this file unless it is only readable
|
therefore most Unix programs do not read this file unless it is only readable
|
||||||
by yourself (curl does not care though).
|
by yourself (curl does not care though).
|
||||||
|
|
||||||
Curl supports `.netrc` files if told to (using the `-n`/`--netrc` and
|
curl supports `.netrc` files if told to (using the `-n`/`--netrc` and
|
||||||
`--netrc-optional` options). This is not restricted to just FTP, so curl can
|
`--netrc-optional` options). This is not restricted to just FTP, so curl can
|
||||||
use it for all protocols where authentication is used.
|
use it for all protocols where authentication is used.
|
||||||
|
|
||||||
@ -876,7 +876,7 @@ ending newline:
|
|||||||
|
|
||||||
## Kerberos FTP Transfer
|
## Kerberos FTP Transfer
|
||||||
|
|
||||||
Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need the
|
curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need the
|
||||||
kerberos package installed and used at curl build time for it to be available.
|
kerberos package installed and used at curl build time for it to be available.
|
||||||
|
|
||||||
First, get the krb-ticket the normal way, like with the `kinit`/`kauth` tool.
|
First, get the krb-ticket the normal way, like with the `kinit`/`kauth` tool.
|
||||||
@ -889,7 +889,7 @@ ask for one and you already entered the real password to `kinit`/`kauth`.
|
|||||||
|
|
||||||
## TELNET
|
## TELNET
|
||||||
|
|
||||||
The curl telnet support is basic and easy to use. Curl passes all data passed
|
The curl telnet support is basic and easy to use. curl passes all data passed
|
||||||
to it on stdin to the remote server. Connect to a remote telnet server using a
|
to it on stdin to the remote server. Connect to a remote telnet server using a
|
||||||
command line similar to:
|
command line similar to:
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
# Rustls
|
# Rustls
|
||||||
|
|
||||||
[Rustls is a TLS backend written in Rust](https://docs.rs/rustls/). Curl can
|
[Rustls is a TLS backend written in Rust](https://docs.rs/rustls/). curl can
|
||||||
be built to use it as an alternative to OpenSSL or other TLS backends. We use
|
be built to use it as an alternative to OpenSSL or other TLS backends. We use
|
||||||
the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This
|
the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This
|
||||||
version of curl depends on version v0.14.0 of rustls-ffi.
|
version of curl depends on version v0.14.0 of rustls-ffi.
|
||||||
|
|||||||
@ -4,7 +4,7 @@ Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|||||||
SPDX-License-Identifier: curl
|
SPDX-License-Identifier: curl
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# The Art Of Scripting HTTP Requests Using Curl
|
# The Art Of Scripting HTTP Requests Using curl
|
||||||
|
|
||||||
## Background
|
## Background
|
||||||
|
|
||||||
@ -15,12 +15,12 @@ SPDX-License-Identifier: curl
|
|||||||
extract information from the web, to fake users, to post or upload data to
|
extract information from the web, to fake users, to post or upload data to
|
||||||
web servers are all important tasks today.
|
web servers are all important tasks today.
|
||||||
|
|
||||||
Curl is a command line tool for doing all sorts of URL manipulations and
|
curl is a command line tool for doing all sorts of URL manipulations and
|
||||||
transfers, but this particular document focuses on how to use it when doing
|
transfers, but this particular document focuses on how to use it when doing
|
||||||
HTTP requests for fun and profit. This documents assumes that you know how to
|
HTTP requests for fun and profit. This documents assumes that you know how to
|
||||||
invoke `curl --help` or `curl --manual` to get basic information about it.
|
invoke `curl --help` or `curl --manual` to get basic information about it.
|
||||||
|
|
||||||
Curl is not written to do everything for you. It makes the requests, it gets
|
curl is not written to do everything for you. It makes the requests, it gets
|
||||||
the data, it sends data and it retrieves the information. You probably need
|
the data, it sends data and it retrieves the information. You probably need
|
||||||
to glue everything together using some kind of script language or repeated
|
to glue everything together using some kind of script language or repeated
|
||||||
manual invokes.
|
manual invokes.
|
||||||
@ -475,7 +475,7 @@ SPDX-License-Identifier: curl
|
|||||||
new page keeping newly generated output. The header that tells the browser to
|
new page keeping newly generated output. The header that tells the browser to
|
||||||
redirect is `Location:`.
|
redirect is `Location:`.
|
||||||
|
|
||||||
Curl does not follow `Location:` headers by default, but simply displays such
|
curl does not follow `Location:` headers by default, but simply displays such
|
||||||
pages in the same manner it displays all HTTP replies. It does however
|
pages in the same manner it displays all HTTP replies. It does however
|
||||||
feature an option that makes it attempt to follow the `Location:` pointers.
|
feature an option that makes it attempt to follow the `Location:` pointers.
|
||||||
|
|
||||||
@ -485,7 +485,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
If you use curl to POST to a site that immediately redirects you to another
|
If you use curl to POST to a site that immediately redirects you to another
|
||||||
page, you can safely use [`--location`](https://curl.se/docs/manpage.html#-L)
|
page, you can safely use [`--location`](https://curl.se/docs/manpage.html#-L)
|
||||||
(`-L`) and `--data`/`--form` together. Curl only uses POST in the first
|
(`-L`) and `--data`/`--form` together. curl only uses POST in the first
|
||||||
request, and then revert to GET in the following operations.
|
request, and then revert to GET in the following operations.
|
||||||
|
|
||||||
## Other redirects
|
## Other redirects
|
||||||
@ -532,7 +532,7 @@ SPDX-License-Identifier: curl
|
|||||||
[`--cookie-jar`](https://curl.se/docs/manpage.html#-c) option described
|
[`--cookie-jar`](https://curl.se/docs/manpage.html#-c) option described
|
||||||
below is a better way to store cookies.)
|
below is a better way to store cookies.)
|
||||||
|
|
||||||
Curl has a full blown cookie parsing engine built-in that comes in use if you
|
curl has a full blown cookie parsing engine built-in that comes in use if you
|
||||||
want to reconnect to a server and use cookies that were stored from a
|
want to reconnect to a server and use cookies that were stored from a
|
||||||
previous connection (or hand-crafted manually to fool the server into
|
previous connection (or hand-crafted manually to fool the server into
|
||||||
believing you had a previous connection). To use previously stored cookies,
|
believing you had a previous connection). To use previously stored cookies,
|
||||||
@ -540,7 +540,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
curl --cookie stored_cookies_in_file http://www.example.com
|
curl --cookie stored_cookies_in_file http://www.example.com
|
||||||
|
|
||||||
Curl's "cookie engine" gets enabled when you use the
|
curl's "cookie engine" gets enabled when you use the
|
||||||
[`--cookie`](https://curl.se/docs/manpage.html#-b) option. If you only
|
[`--cookie`](https://curl.se/docs/manpage.html#-b) option. If you only
|
||||||
want curl to understand received cookies, use `--cookie` with a file that
|
want curl to understand received cookies, use `--cookie` with a file that
|
||||||
does not exist. Example, if you want to let curl understand cookies from a
|
does not exist. Example, if you want to let curl understand cookies from a
|
||||||
@ -549,7 +549,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
curl --cookie nada --location http://www.example.com
|
curl --cookie nada --location http://www.example.com
|
||||||
|
|
||||||
Curl has the ability to read and write cookie files that use the same file
|
curl has the ability to read and write cookie files that use the same file
|
||||||
format that Netscape and Mozilla once used. It is a convenient way to share
|
format that Netscape and Mozilla once used. It is a convenient way to share
|
||||||
cookies between scripts or invokes. The `--cookie` (`-b`) switch
|
cookies between scripts or invokes. The `--cookie` (`-b`) switch
|
||||||
automatically detects if a given file is such a cookie file and parses it,
|
automatically detects if a given file is such a cookie file and parses it,
|
||||||
@ -571,7 +571,7 @@ SPDX-License-Identifier: curl
|
|||||||
SSL (or TLS as the current version of the standard is called) offers a set of
|
SSL (or TLS as the current version of the standard is called) offers a set of
|
||||||
advanced features to do secure transfers over HTTP.
|
advanced features to do secure transfers over HTTP.
|
||||||
|
|
||||||
Curl supports encrypted fetches when built to use a TLS library and it can be
|
curl supports encrypted fetches when built to use a TLS library and it can be
|
||||||
built to use one out of a fairly large set of libraries - `curl -V` shows
|
built to use one out of a fairly large set of libraries - `curl -V` shows
|
||||||
which one your curl was built to use (if any). To get a page from an HTTPS
|
which one your curl was built to use (if any). To get a page from an HTTPS
|
||||||
server, simply run curl like:
|
server, simply run curl like:
|
||||||
@ -581,7 +581,7 @@ SPDX-License-Identifier: curl
|
|||||||
## Certificates
|
## Certificates
|
||||||
|
|
||||||
In the HTTPS world, you use certificates to validate that you are the one you
|
In the HTTPS world, you use certificates to validate that you are the one you
|
||||||
claim to be, as an addition to normal passwords. Curl supports client- side
|
claim to be, as an addition to normal passwords. curl supports client- side
|
||||||
certificates. All certificates are locked with a passphrase, which you need
|
certificates. All certificates are locked with a passphrase, which you need
|
||||||
to enter before the certificate can be used by curl. The passphrase can be
|
to enter before the certificate can be used by curl. The passphrase can be
|
||||||
specified on the command line or if not, entered interactively when curl
|
specified on the command line or if not, entered interactively when curl
|
||||||
|
|||||||
@ -7,7 +7,7 @@ SPDX-License-Identifier: curl
|
|||||||
Version Numbers and Releases
|
Version Numbers and Releases
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Curl is not only curl. Curl is also libcurl. They are actually individually
|
The command line tool curl and the library libcurl are individually
|
||||||
versioned, but they usually follow each other closely.
|
versioned, but they usually follow each other closely.
|
||||||
|
|
||||||
The version numbering is always built up using the same system:
|
The version numbering is always built up using the same system:
|
||||||
|
|||||||
@ -33,14 +33,14 @@ FTP accept failed. While waiting for the server to connect back when an active
|
|||||||
FTP session is used, an error code was sent over the control connection or
|
FTP session is used, an error code was sent over the control connection or
|
||||||
similar.
|
similar.
|
||||||
## 11
|
## 11
|
||||||
FTP weird PASS reply. Curl could not parse the reply sent to the PASS request.
|
FTP weird PASS reply. curl could not parse the reply sent to the PASS request.
|
||||||
## 12
|
## 12
|
||||||
During an active FTP session while waiting for the server to connect back to
|
During an active FTP session while waiting for the server to connect back to
|
||||||
curl, the timeout expired.
|
curl, the timeout expired.
|
||||||
## 13
|
## 13
|
||||||
FTP weird PASV reply, Curl could not parse the reply sent to the PASV request.
|
FTP weird PASV reply, curl could not parse the reply sent to the PASV request.
|
||||||
## 14
|
## 14
|
||||||
FTP weird 227 format. Curl could not parse the 227-line the server sent.
|
FTP weird 227 format. curl could not parse the 227-line the server sent.
|
||||||
## 15
|
## 15
|
||||||
FTP cannot use host. Could not resolve the host IP we got in the 227-line.
|
FTP cannot use host. Could not resolve the host IP we got in the 227-line.
|
||||||
## 16
|
## 16
|
||||||
@ -61,7 +61,7 @@ HTTP page not retrieved. The requested URL was not found or returned another
|
|||||||
error with the HTTP error code being 400 or above. This return code only
|
error with the HTTP error code being 400 or above. This return code only
|
||||||
appears if --fail is used.
|
appears if --fail is used.
|
||||||
## 23
|
## 23
|
||||||
Write error. Curl could not write data to a local filesystem or similar.
|
Write error. curl could not write data to a local filesystem or similar.
|
||||||
## 25
|
## 25
|
||||||
Failed starting the upload. For FTP, the server typically denied the STOR
|
Failed starting the upload. For FTP, the server typically denied the STOR
|
||||||
command.
|
command.
|
||||||
|
|||||||
@ -20,7 +20,7 @@ Example:
|
|||||||
# `--cookie-jar`
|
# `--cookie-jar`
|
||||||
|
|
||||||
Specify to which file you want curl to write all cookies after a completed
|
Specify to which file you want curl to write all cookies after a completed
|
||||||
operation. Curl writes all cookies from its in-memory cookie storage to the
|
operation. curl writes all cookies from its in-memory cookie storage to the
|
||||||
given file at the end of operations. Even if no cookies are known, a file is
|
given file at the end of operations. Even if no cookies are known, a file is
|
||||||
created so that it removes any formerly existing cookies from the file. The
|
created so that it removes any formerly existing cookies from the file. The
|
||||||
file uses the Netscape cookie file format. If you set the filename to a single
|
file uses the Netscape cookie file format. If you set the filename to a single
|
||||||
|
|||||||
@ -17,7 +17,7 @@ Example:
|
|||||||
# `--disable-eprt`
|
# `--disable-eprt`
|
||||||
|
|
||||||
Disable the use of the EPRT and LPRT commands when doing active FTP transfers.
|
Disable the use of the EPRT and LPRT commands when doing active FTP transfers.
|
||||||
Curl normally first attempts to use EPRT before using PORT, but with this
|
curl normally first attempts to use EPRT before using PORT, but with this
|
||||||
option, it uses PORT right away. EPRT is an extension to the original FTP
|
option, it uses PORT right away. EPRT is an extension to the original FTP
|
||||||
protocol, and does not work on all servers, but enables more functionality in
|
protocol, and does not work on all servers, but enables more functionality in
|
||||||
a better way than the traditional PORT command.
|
a better way than the traditional PORT command.
|
||||||
|
|||||||
@ -16,7 +16,7 @@ Example:
|
|||||||
|
|
||||||
# `--disable-epsv`
|
# `--disable-epsv`
|
||||||
|
|
||||||
Disable the use of the EPSV command when doing passive FTP transfers. Curl
|
Disable the use of the EPSV command when doing passive FTP transfers. curl
|
||||||
normally first attempts to use EPSV before PASV, but with this option, it does
|
normally first attempts to use EPSV before PASV, but with this option, it does
|
||||||
not try EPSV.
|
not try EPSV.
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ Example:
|
|||||||
# `--hostpubsha256`
|
# `--hostpubsha256`
|
||||||
|
|
||||||
Pass a string containing a Base64-encoded SHA256 hash of the remote host's
|
Pass a string containing a Base64-encoded SHA256 hash of the remote host's
|
||||||
public key. Curl refuses the connection with the host unless the hashes match.
|
public key. curl refuses the connection with the host unless the hashes match.
|
||||||
|
|
||||||
This feature requires libcurl to be built with libssh2 and does not work with
|
This feature requires libcurl to be built with libssh2 and does not work with
|
||||||
other SSH backends.
|
other SSH backends.
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Example:
|
|||||||
Make curl scan the *.netrc* file in the user's home directory for login name
|
Make curl scan the *.netrc* file in the user's home directory for login name
|
||||||
and password. This is typically used for FTP on Unix. If used with HTTP, curl
|
and password. This is typically used for FTP on Unix. If used with HTTP, curl
|
||||||
enables user authentication. See *netrc(5)* and *ftp(1)* for details on the
|
enables user authentication. See *netrc(5)* and *ftp(1)* for details on the
|
||||||
file format. Curl does not complain if that file does not have the right
|
file format. curl does not complain if that file does not have the right
|
||||||
permissions (it should be neither world- nor group-readable). The environment
|
permissions (it should be neither world- nor group-readable). The environment
|
||||||
variable "HOME" is used to find the home directory.
|
variable "HOME" is used to find the home directory.
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ Example:
|
|||||||
|
|
||||||
# `--silent`
|
# `--silent`
|
||||||
|
|
||||||
Silent or quiet mode. Do not show progress meter or error messages. Makes Curl
|
Silent or quiet mode. Do not show progress meter or error messages. Makes curl
|
||||||
mute. It still outputs the data you ask for, potentially even to the
|
mute. It still outputs the data you ask for, potentially even to the
|
||||||
terminal/stdout unless you redirect it.
|
terminal/stdout unless you redirect it.
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ link your application with libcurl.
|
|||||||
|
|
||||||
## --prefix
|
## --prefix
|
||||||
|
|
||||||
This is the prefix used when libcurl was installed. Libcurl is then installed
|
This is the prefix used when libcurl was installed. libcurl is then installed
|
||||||
in $prefix/lib and its header files are installed in $prefix/include and so
|
in $prefix/lib and its header files are installed in $prefix/include and so
|
||||||
on. The prefix is set with "configure --prefix".
|
on. The prefix is set with "configure --prefix".
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ int main(void)
|
|||||||
CURLMsg *msg; /* for picking up messages with the transfer status */
|
CURLMsg *msg; /* for picking up messages with the transfer status */
|
||||||
int msgs_left; /* how many messages are left */
|
int msgs_left; /* how many messages are left */
|
||||||
|
|
||||||
/* Allocate one CURL handle per transfer */
|
/* Allocate one curl handle per transfer */
|
||||||
for(i = 0; i < HANDLECOUNT; i++)
|
for(i = 0; i < HANDLECOUNT; i++)
|
||||||
handles[i] = curl_easy_init();
|
handles[i] = curl_easy_init();
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ int main(void)
|
|||||||
CURLMsg *msg; /* for picking up messages with the transfer status */
|
CURLMsg *msg; /* for picking up messages with the transfer status */
|
||||||
int msgs_left; /* how many messages are left */
|
int msgs_left; /* how many messages are left */
|
||||||
|
|
||||||
/* Allocate one CURL handle per transfer */
|
/* Allocate one curl handle per transfer */
|
||||||
for(i = 0; i < HANDLECOUNT; i++)
|
for(i = 0; i < HANDLECOUNT; i++)
|
||||||
handles[i] = curl_easy_init();
|
handles[i] = curl_easy_init();
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ int main(void)
|
|||||||
|
|
||||||
curl_multi_cleanup(multi_handle);
|
curl_multi_cleanup(multi_handle);
|
||||||
|
|
||||||
/* Free the CURL handles */
|
/* Free the curl handles */
|
||||||
for(i = 0; i < HANDLECOUNT; i++)
|
for(i = 0; i < HANDLECOUNT; i++)
|
||||||
curl_easy_cleanup(handles[i]);
|
curl_easy_cleanup(handles[i]);
|
||||||
|
|
||||||
|
|||||||
@ -11,8 +11,8 @@ to and read from. It manages read and write positions and has a maximum size.
|
|||||||
|
|
||||||
## read/write
|
## read/write
|
||||||
|
|
||||||
Its basic read/write functions have a similar signature and return code handling
|
Its basic read/write functions have a similar signature and return code
|
||||||
as many internal Curl read and write ones.
|
handling as many internal curl read and write ones.
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -84,9 +84,8 @@ It is possible to undo writes by calling:
|
|||||||
CURLcode Curl_bufq_unwrite(struct bufq *q, size_t len);
|
CURLcode Curl_bufq_unwrite(struct bufq *q, size_t len);
|
||||||
```
|
```
|
||||||
|
|
||||||
This will remove `len` bytes from the end of the bufq again. When removing
|
This removes `len` bytes from the end of the bufq again. When removing more
|
||||||
more bytes than are present, CURLE_AGAIN is returned and the bufq will be
|
bytes than are present, CURLE_AGAIN is returned and bufq is cleared.
|
||||||
empty.
|
|
||||||
|
|
||||||
## lifetime
|
## lifetime
|
||||||
|
|
||||||
|
|||||||
@ -65,12 +65,11 @@ See also `Curl_llist_insert_next`.
|
|||||||
## Remove a node
|
## Remove a node
|
||||||
|
|
||||||
Remove a node again from a list by calling `Curl_llist_remove()`. This
|
Remove a node again from a list by calling `Curl_llist_remove()`. This
|
||||||
will destroy the node's `elem` (e.g. calling a registered free function).
|
destroys the node's `elem` (e.g. calling a registered free function).
|
||||||
|
|
||||||
To remove a node without destroying it's `elem`, use
|
To remove a node without destroying its `elem`, use `Curl_node_take_elem()`
|
||||||
`Curl_node_take_elem()` which returns the `elem` pointer and
|
which returns the `elem` pointer and removes the node from the list. The
|
||||||
removes the node from the list. The caller then owns this pointer
|
caller then owns this pointer and has to take care of it.
|
||||||
and has to take care of it.
|
|
||||||
|
|
||||||
## Iterate
|
## Iterate
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,8 @@ Example subscribe:
|
|||||||
|
|
||||||
curl mqtt://host.home/bedroom/temp
|
curl mqtt://host.home/bedroom/temp
|
||||||
|
|
||||||
This will send an MQTT SUBSCRIBE packet for the topic `bedroom/temp` and listen in for incoming PUBLISH packets.
|
This sends an MQTT SUBSCRIBE packet for the topic `bedroom/temp` and listen in
|
||||||
|
for incoming PUBLISH packets.
|
||||||
|
|
||||||
### Publishing
|
### Publishing
|
||||||
|
|
||||||
@ -35,7 +36,8 @@ Example publish:
|
|||||||
|
|
||||||
curl -d 75 mqtt://host.home/bedroom/dimmer
|
curl -d 75 mqtt://host.home/bedroom/dimmer
|
||||||
|
|
||||||
This will send an MQTT PUBLISH packet to the topic `bedroom/dimmer` with the payload `75`.
|
This sends an MQTT PUBLISH packet to the topic `bedroom/dimmer` with the
|
||||||
|
payload `75`.
|
||||||
|
|
||||||
## What does curl deliver as a response to a subscribe
|
## What does curl deliver as a response to a subscribe
|
||||||
|
|
||||||
|
|||||||
@ -27,7 +27,7 @@ for an insight into this topic.
|
|||||||
These difference between TLS protocol versions are reflected in curl's
|
These difference between TLS protocol versions are reflected in curl's
|
||||||
handling of session tickets. More below.
|
handling of session tickets. More below.
|
||||||
|
|
||||||
## Curl's `ssl_peer_key`
|
## curl's `ssl_peer_key`
|
||||||
|
|
||||||
In order to find a ticket from a previous TLS session, curl
|
In order to find a ticket from a previous TLS session, curl
|
||||||
needs a name for TLS sessions that uniquely identifies the peer
|
needs a name for TLS sessions that uniquely identifies the peer
|
||||||
@ -55,18 +55,18 @@ Examples:
|
|||||||
Different configurations produce different keys which is just what
|
Different configurations produce different keys which is just what
|
||||||
curl needs when handling SSL session tickets.
|
curl needs when handling SSL session tickets.
|
||||||
|
|
||||||
One important thing: peer keys do not contain confidential
|
One important thing: peer keys do not contain confidential information. If you
|
||||||
information. If you configure a client certificate or SRP authentication
|
configure a client certificate or SRP authentication with username/password,
|
||||||
with username/password, these will not be part of the peer key.
|
these are not part of the peer key.
|
||||||
|
|
||||||
However, peer keys carry the hostnames you use curl for. The *do*
|
However, peer keys carry the hostnames you use curl for. The *do*
|
||||||
leak the privacy of your communication. We recommend to *not* persist
|
leak the privacy of your communication. We recommend to *not* persist
|
||||||
peer keys for this reason.
|
peer keys for this reason.
|
||||||
|
|
||||||
**Caveat**: The key may contain file names or paths. It does not
|
**Caveat**: The key may contain filenames or paths. It does not reflect the
|
||||||
reflect the *contents* in the filesystem. If you change `/etc/ssl/cert.pem`
|
*contents* in the filesystem. If you change `/etc/ssl/cert.pem` and reuse a
|
||||||
and reuse a previous ticket, curl might trust a server which no
|
previous ticket, curl might trust a server which no longer has a root
|
||||||
longer has a root certificate in the file.
|
certificate in the file.
|
||||||
|
|
||||||
|
|
||||||
## Session Cache Access
|
## Session Cache Access
|
||||||
@ -76,22 +76,20 @@ longer has a root certificate in the file.
|
|||||||
When a new connection is being established, each SSL connection filter creates
|
When a new connection is being established, each SSL connection filter creates
|
||||||
its own peer_key and calls into the cache. The cache then looks for a ticket
|
its own peer_key and calls into the cache. The cache then looks for a ticket
|
||||||
with exactly this peer_key. Peer keys between proxy SSL filters and SSL
|
with exactly this peer_key. Peer keys between proxy SSL filters and SSL
|
||||||
filters talking through a tunnel will differ, as they talk to different
|
filters talking through a tunnel differ, as they talk to different peers.
|
||||||
peers.
|
|
||||||
|
|
||||||
If the connection filter wants to use a client certificate or SRP
|
If the connection filter wants to use a client certificate or SRP
|
||||||
authentication, the cache will check those as well. If the cache peer
|
authentication, the cache checks those as well. If the cache peer carries
|
||||||
carries client cert or SRP auth, the connection filter must have
|
client cert or SRP auth, the connection filter must have those with the same
|
||||||
those with the same values (and vice versa).
|
values (and vice versa).
|
||||||
|
|
||||||
On a match, the connection filter gets the session ticket and feeds that
|
On a match, the connection filter gets the session ticket and feeds that to
|
||||||
to the TLS implementation which, on accepting it, will try to resume it
|
the TLS implementation which, on accepting it, tries to resume it for a
|
||||||
for a shorter handshake. In addition, the filter gets the ALPN used
|
shorter handshake. In addition, the filter gets the ALPN used before and the
|
||||||
before and the amount of 0-RTT data that the server announced to be
|
amount of 0-RTT data that the server announced to be willing to accept. The
|
||||||
willing to accept. The filter can then decide if it wants to attempt
|
filter can then decide if it wants to attempt 0-RTT or not. (The ALPN is
|
||||||
0-RTT or not. (The ALPN is needed to know if the server speaks the
|
needed to know if the server speaks the protocol you want to send in 0-RTT. It
|
||||||
protocol you want to send in 0-RTT. It makes no sense to send HTTP/2
|
makes no sense to send HTTP/2 requests to a server that only knows HTTP/1.1.)
|
||||||
requests to a server that only knows HTTP/1.1.)
|
|
||||||
|
|
||||||
#### Updates
|
#### Updates
|
||||||
|
|
||||||
@ -106,10 +104,10 @@ when a filter accesses the session cache, it *takes*
|
|||||||
a ticket from the cache, meaning a returned ticket is removed. The filter
|
a ticket from the cache, meaning a returned ticket is removed. The filter
|
||||||
then configures its TLS backend and *returns* the ticket to the cache.
|
then configures its TLS backend and *returns* the ticket to the cache.
|
||||||
|
|
||||||
The cache needs to treat tickets from TLSv1.2 and 1.3 differently.
|
The cache needs to treat tickets from TLSv1.2 and 1.3 differently. 1.2 tickets
|
||||||
1.2 tickets should be reused, but 1.3 tickets SHOULD NOT (RFC 8446).
|
should be reused, but 1.3 tickets SHOULD NOT (RFC 8446). The session cache
|
||||||
The session cache will simply drop 1.3 tickets when they are returned
|
simply drops 1.3 tickets when they are returned after use, but keeps a 1.2
|
||||||
after use, but keep a 1.2 ticket.
|
ticket.
|
||||||
|
|
||||||
When a ticket is *put* into the cache, there is also a difference. There
|
When a ticket is *put* into the cache, there is also a difference. There
|
||||||
can be several 1.3 tickets at the same time, but only a single 1.2 ticket.
|
can be several 1.3 tickets at the same time, but only a single 1.2 ticket.
|
||||||
@ -117,16 +115,16 @@ TLSv1.2 tickets replace any other. 1.3 tickets accumulate up to a max
|
|||||||
amount.
|
amount.
|
||||||
|
|
||||||
By having a "put/take/return" we reflect the 1.3 use case nicely. Two
|
By having a "put/take/return" we reflect the 1.3 use case nicely. Two
|
||||||
concurrent connections will not reuse the same ticket.
|
concurrent connections do not reuse the same ticket.
|
||||||
|
|
||||||
## Session Ticket Persistence
|
## Session Ticket Persistence
|
||||||
|
|
||||||
#### Privacy and Security
|
#### Privacy and Security
|
||||||
|
|
||||||
As mentioned above, ssl peer keys are not intended for storage in a
|
As mentioned above, ssl peer keys are not intended for storage in a file
|
||||||
file system. They'll clearly show which hosts the user talked to. This
|
system. They clearly show which hosts the user talked to. This maybe "just"
|
||||||
maybe "just" privacy relevant, but has security implications as an
|
privacy relevant, but has security implications as an attacker might find
|
||||||
attacker might find worthy targets among your peer keys.
|
worthy targets among your peer keys.
|
||||||
|
|
||||||
Also, we do not recommend to persist TLSv1.2 tickets.
|
Also, we do not recommend to persist TLSv1.2 tickets.
|
||||||
|
|
||||||
@ -137,32 +135,29 @@ it provides a salted SHA256 hash of the peer key for import and export.
|
|||||||
|
|
||||||
#### Export
|
#### Export
|
||||||
|
|
||||||
The salt is generated randomly for each peer key on export. The
|
The salt is generated randomly for each peer key on export. The SHA256 makes
|
||||||
SHA256 makes sure that the peer key cannot be reversed and that
|
sure that the peer key cannot be reversed and that a slightly different key
|
||||||
a slightly different key still produces a very different result.
|
still produces a different result.
|
||||||
|
|
||||||
This means an attacker cannot just "grep" a session file for a
|
This means an attacker cannot just "grep" a session file for a particular
|
||||||
particular entry, e.g. if they want to know if you accessed a
|
entry, e.g. if they want to know if you accessed a specific host. They *can*
|
||||||
specific host. They *can* however compute the SHA256 hashes for
|
however compute the SHA256 hashes for all salts in the file and find a
|
||||||
all salts in the file and find a specific entry. But they *cannot*
|
specific entry. They *cannot* find a hostname they do not know. They would
|
||||||
find a hostname they do not know. They'd have to brute force by
|
have to brute force by guessing.
|
||||||
guessing.
|
|
||||||
|
|
||||||
#### Import
|
#### Import
|
||||||
|
|
||||||
When session tickets are imported from a file, curl only gets the
|
When session tickets are imported from a file, curl only gets the salted
|
||||||
salted hashes. The tickets imported will belong to an *unknown*
|
hashes. The imported tickets belong to an *unknown* peer key.
|
||||||
peer key.
|
|
||||||
|
|
||||||
When a connection filter tries to *take* a session ticket, it will
|
When a connection filter tries to *take* a session ticket, it passes its peer
|
||||||
pass its peer key. This peer key will initially not match any
|
key. This peer key initially does not match any tickets in the cache. The
|
||||||
tickets in the cache. The cache then checks all entries with
|
cache then checks all entries with unknown peer keys if the passed key matches
|
||||||
unknown peer keys if the passed key matches their salted hash. If
|
their salted hash. If it does, the peer key is recovered and remembered at the
|
||||||
it does, the peer key is recovered and remembered at the cache
|
cache entry.
|
||||||
entry.
|
|
||||||
|
|
||||||
This is a performance penalty in the order of "unknown" peer keys
|
This is a performance penalty in the order of "unknown" peer keys which
|
||||||
which will diminish over time when keys are rediscovered. Note that
|
diminishes over time when keys are rediscovered. Note that this also works for
|
||||||
this also works for putting a new ticket into the cache: when no
|
putting a new ticket into the cache: when no present entry matches, a new one
|
||||||
present entry matches, a new one with peer key is created. This
|
with peer key is created. This peer key then no longer bears the cost of hash
|
||||||
peer key will then no longer bear the cost of hash computes.
|
computes.
|
||||||
|
|||||||
@ -30,8 +30,8 @@ CURL *curl_easy_init();
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
This function allocates and returns a CURL easy handle. Such a handle is used
|
This function allocates and returns an easy handle. Such a handle is used as
|
||||||
as input to other functions in the easy interface. This call must have a
|
input to other functions in the easy interface. This call must have a
|
||||||
corresponding call to curl_easy_cleanup(3) when the operation is complete.
|
corresponding call to curl_easy_cleanup(3) when the operation is complete.
|
||||||
|
|
||||||
The easy handle is used to hold and control a single network transfer. It is
|
The easy handle is used to hold and control a single network transfer. It is
|
||||||
|
|||||||
@ -28,7 +28,7 @@ void curl_easy_reset(CURL *handle);
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Re-initializes all options previously set on a specified CURL handle to the
|
Re-initializes all options previously set on a specified curl handle to the
|
||||||
default values. This puts back the handle to the same state as it was in when
|
default values. This puts back the handle to the same state as it was in when
|
||||||
it was just created with curl_easy_init(3).
|
it was just created with curl_easy_init(3).
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,7 @@ protocol used does not support this.
|
|||||||
|
|
||||||
The **ct** pointer is set to NULL or pointing to private memory. You MUST
|
The **ct** pointer is set to NULL or pointing to private memory. You MUST
|
||||||
NOT free it - it gets freed when you call curl_easy_cleanup(3) on the
|
NOT free it - it gets freed when you call curl_easy_cleanup(3) on the
|
||||||
corresponding CURL handle.
|
corresponding curl handle.
|
||||||
|
|
||||||
The modern way to get this header from a response is to instead use the
|
The modern way to get this header from a response is to instead use the
|
||||||
curl_easy_header(3) function.
|
curl_easy_header(3) function.
|
||||||
|
|||||||
@ -37,7 +37,7 @@ the same method the first request would use.
|
|||||||
|
|
||||||
The **methodp** pointer is NULL or points to private memory. You MUST NOT
|
The **methodp** pointer is NULL or points to private memory. You MUST NOT
|
||||||
free - it gets freed when you call curl_easy_cleanup(3) on the
|
free - it gets freed when you call curl_easy_cleanup(3) on the
|
||||||
corresponding CURL handle.
|
corresponding curl handle.
|
||||||
|
|
||||||
# %PROTOCOLS%
|
# %PROTOCOLS%
|
||||||
|
|
||||||
|
|||||||
@ -33,8 +33,8 @@ In cases when you have asked libcurl to follow redirects, it may not be the same
|
|||||||
value you set with CURLOPT_URL(3).
|
value you set with CURLOPT_URL(3).
|
||||||
|
|
||||||
The **urlp** pointer is NULL or points to private memory. You MUST NOT free
|
The **urlp** pointer is NULL or points to private memory. You MUST NOT free
|
||||||
- it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
- it gets freed when you call curl_easy_cleanup(3) on the corresponding curl
|
||||||
CURL handle.
|
handle.
|
||||||
|
|
||||||
# %PROTOCOLS%
|
# %PROTOCOLS%
|
||||||
|
|
||||||
|
|||||||
@ -32,8 +32,8 @@ logging on to the remote FTP server. This stores a NULL as pointer if
|
|||||||
something is wrong.
|
something is wrong.
|
||||||
|
|
||||||
The **path** pointer is NULL or points to private memory. You MUST NOT free
|
The **path** pointer is NULL or points to private memory. You MUST NOT free
|
||||||
- it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
- it gets freed when you call curl_easy_cleanup(3) on the corresponding curl
|
||||||
CURL handle.
|
handle.
|
||||||
|
|
||||||
# %PROTOCOLS%
|
# %PROTOCOLS%
|
||||||
|
|
||||||
|
|||||||
@ -35,9 +35,9 @@ string holding the IP address of the most recent connection done with this
|
|||||||
get a pointer to a memory area that is reused at next request so you need to
|
get a pointer to a memory area that is reused at next request so you need to
|
||||||
copy the string if you want to keep the information.
|
copy the string if you want to keep the information.
|
||||||
|
|
||||||
The **ip** pointer is NULL or points to private memory. You MUST NOT free -
|
The **ip** pointer is NULL or points to private memory. You MUST NOT free - it
|
||||||
it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
gets freed when you call curl_easy_cleanup(3) on the corresponding curl
|
||||||
CURL handle.
|
handle.
|
||||||
|
|
||||||
# %PROTOCOLS%
|
# %PROTOCOLS%
|
||||||
|
|
||||||
|
|||||||
@ -32,8 +32,8 @@ Pass in a pointer to a char pointer and get the referrer header used in the
|
|||||||
most recent request.
|
most recent request.
|
||||||
|
|
||||||
The **hdrp** pointer is NULL or points to private memory you MUST NOT free -
|
The **hdrp** pointer is NULL or points to private memory you MUST NOT free -
|
||||||
it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
it gets freed when you call curl_easy_cleanup(3) on the corresponding curl
|
||||||
CURL handle.
|
handle.
|
||||||
|
|
||||||
# %PROTOCOLS%
|
# %PROTOCOLS%
|
||||||
|
|
||||||
|
|||||||
@ -33,9 +33,9 @@ most recent RTSP Session ID.
|
|||||||
Applications wishing to resume an RTSP session on another connection should
|
Applications wishing to resume an RTSP session on another connection should
|
||||||
retrieve this info before closing the active connection.
|
retrieve this info before closing the active connection.
|
||||||
|
|
||||||
The **id** pointer is NULL or points to private memory. You MUST NOT free -
|
The **id** pointer is NULL or points to private memory. You MUST NOT free - it
|
||||||
it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
gets freed when you call curl_easy_cleanup(3) on the corresponding curl
|
||||||
CURL handle.
|
handle.
|
||||||
|
|
||||||
# %PROTOCOLS%
|
# %PROTOCOLS%
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,7 @@ this CURL **handle**.
|
|||||||
|
|
||||||
The **scheme** pointer is NULL or points to private memory. You MUST NOT
|
The **scheme** pointer is NULL or points to private memory. You MUST NOT
|
||||||
free - it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
free - it gets freed when you call curl_easy_cleanup(3) on the corresponding
|
||||||
CURL handle.
|
curl handle.
|
||||||
|
|
||||||
The returned scheme might be upper or lowercase. Do comparisons case
|
The returned scheme might be upper or lowercase. Do comparisons case
|
||||||
insensitively.
|
insensitively.
|
||||||
|
|||||||
@ -77,7 +77,7 @@ introduced in later libcurl versions.
|
|||||||
## CURL_PUSH_OK (0)
|
## CURL_PUSH_OK (0)
|
||||||
|
|
||||||
The application has accepted the stream and it can now start receiving data,
|
The application has accepted the stream and it can now start receiving data,
|
||||||
the ownership of the CURL handle has been taken over by the application.
|
the ownership of the curl handle has been taken over by the application.
|
||||||
|
|
||||||
## CURL_PUSH_DENY (1)
|
## CURL_PUSH_DENY (1)
|
||||||
|
|
||||||
|
|||||||
@ -42,9 +42,9 @@ When CURLOPT_DOH_SSL_VERIFYHOST(3) is 2, the SSL certificate provided by
|
|||||||
the DoH server must indicate that the server name is the same as the server
|
the DoH server must indicate that the server name is the same as the server
|
||||||
name to which you meant to connect to, or the connection fails.
|
name to which you meant to connect to, or the connection fails.
|
||||||
|
|
||||||
Curl considers the DoH server the intended one when the Common Name field or a
|
curl considers the DoH server the intended one when the Common Name field or a
|
||||||
Subject Alternate Name field in the certificate matches the hostname in the
|
Subject Alternate Name field in the certificate matches the hostname in the
|
||||||
DoH URL to which you told Curl to connect.
|
DoH URL to which you told curl to connect.
|
||||||
|
|
||||||
When the *verify* value is set to 1L it is treated the same as 2L. However
|
When the *verify* value is set to 1L it is treated the same as 2L. However
|
||||||
for consistency with the other *VERIFYHOST* options we suggest use 2 and
|
for consistency with the other *VERIFYHOST* options we suggest use 2 and
|
||||||
|
|||||||
@ -44,7 +44,7 @@ This option is the DoH equivalent of CURLOPT_SSL_VERIFYPEER(3) and
|
|||||||
only affects requests to the DoH server.
|
only affects requests to the DoH server.
|
||||||
|
|
||||||
When negotiating a TLS or SSL connection, the server sends a certificate
|
When negotiating a TLS or SSL connection, the server sends a certificate
|
||||||
indicating its identity. Curl verifies whether the certificate is authentic,
|
indicating its identity. curl verifies whether the certificate is authentic,
|
||||||
i.e. that you can trust that the server is who the certificate says it is.
|
i.e. that you can trust that the server is who the certificate says it is.
|
||||||
This trust is based on a chain of digital signatures, rooted in certification
|
This trust is based on a chain of digital signatures, rooted in certification
|
||||||
authority (CA) certificates you supply. curl uses a default bundle of CA
|
authority (CA) certificates you supply. curl uses a default bundle of CA
|
||||||
|
|||||||
@ -29,7 +29,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_CONTENT_DECODING,
|
|||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Pass a long to tell libcurl how to act on content decoding. If set to zero,
|
Pass a long to tell libcurl how to act on content decoding. If set to zero,
|
||||||
content decoding is disabled. If set to 1 it is enabled. Libcurl has no
|
content decoding is disabled. If set to 1 it is enabled. libcurl has no
|
||||||
default content decoding but requires you to use
|
default content decoding but requires you to use
|
||||||
CURLOPT_ACCEPT_ENCODING(3) for that.
|
CURLOPT_ACCEPT_ENCODING(3) for that.
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,7 @@ shown above.
|
|||||||
|
|
||||||
This callback function gets called by libcurl as soon as it has received
|
This callback function gets called by libcurl as soon as it has received
|
||||||
interleaved RTP data. This function gets called for each $ block and therefore
|
interleaved RTP data. This function gets called for each $ block and therefore
|
||||||
contains exactly one upper-layer protocol unit (e.g. one RTP packet). Curl
|
contains exactly one upper-layer protocol unit (e.g. one RTP packet). curl
|
||||||
writes the interleaved header as well as the included data for each call. The
|
writes the interleaved header as well as the included data for each call. The
|
||||||
first byte is always an ASCII dollar sign. The dollar sign is followed by a
|
first byte is always an ASCII dollar sign. The dollar sign is followed by a
|
||||||
one byte channel identifier and then a 2 byte integer length in network byte
|
one byte channel identifier and then a 2 byte integer length in network byte
|
||||||
|
|||||||
@ -41,7 +41,7 @@ When CURLOPT_PROXY_SSL_VERIFYHOST(3) is 2, the proxy certificate must
|
|||||||
indicate that the server is the proxy to which you meant to connect to, or the
|
indicate that the server is the proxy to which you meant to connect to, or the
|
||||||
connection fails.
|
connection fails.
|
||||||
|
|
||||||
Curl considers the proxy the intended one when the Common Name field or a
|
curl considers the proxy the intended one when the Common Name field or a
|
||||||
Subject Alternate Name field in the certificate matches the hostname in the
|
Subject Alternate Name field in the certificate matches the hostname in the
|
||||||
proxy string which you told curl to use.
|
proxy string which you told curl to use.
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@ This is the proxy version of CURLOPT_SSL_VERIFYPEER(3) that is used for
|
|||||||
ordinary HTTPS servers.
|
ordinary HTTPS servers.
|
||||||
|
|
||||||
When negotiating a TLS or SSL connection, the server sends a certificate
|
When negotiating a TLS or SSL connection, the server sends a certificate
|
||||||
indicating its identity. Curl verifies whether the certificate is authentic,
|
indicating its identity. curl verifies whether the certificate is authentic,
|
||||||
i.e. that you can trust that the server is who the certificate says it is.
|
i.e. that you can trust that the server is who the certificate says it is.
|
||||||
This trust is based on a chain of digital signatures, rooted in certification
|
This trust is based on a chain of digital signatures, rooted in certification
|
||||||
authority (CA) certificates you supply. curl uses a default bundle of CA
|
authority (CA) certificates you supply. curl uses a default bundle of CA
|
||||||
|
|||||||
@ -65,11 +65,11 @@ It gets called when the known_host matching has been done, to allow the
|
|||||||
application to act and decide for libcurl how to proceed. The callback is only
|
application to act and decide for libcurl how to proceed. The callback is only
|
||||||
called if CURLOPT_SSH_KNOWNHOSTS(3) is also set.
|
called if CURLOPT_SSH_KNOWNHOSTS(3) is also set.
|
||||||
|
|
||||||
This callback function gets passed the CURL handle, the key from the
|
This callback function gets passed the curl handle, the key from the
|
||||||
known_hosts file *knownkey*, the key from the remote site *foundkey*,
|
known_hosts file *knownkey*, the key from the remote site *foundkey*, info
|
||||||
info from libcurl on the matching status and a custom pointer (set with
|
from libcurl on the matching status and a custom pointer (set with
|
||||||
CURLOPT_SSH_KEYDATA(3)). It MUST return one of the following return
|
CURLOPT_SSH_KEYDATA(3)). It MUST return one of the following return codes to
|
||||||
codes to tell libcurl how to act:
|
tell libcurl how to act:
|
||||||
|
|
||||||
## CURLKHSTAT_FINE_REPLACE
|
## CURLKHSTAT_FINE_REPLACE
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ This option determines whether curl verifies the authenticity of the peer's
|
|||||||
certificate. A value of 1 means curl verifies; 0 (zero) means it does not.
|
certificate. A value of 1 means curl verifies; 0 (zero) means it does not.
|
||||||
|
|
||||||
When negotiating a TLS or SSL connection, the server sends a certificate
|
When negotiating a TLS or SSL connection, the server sends a certificate
|
||||||
indicating its identity. Curl verifies whether the certificate is authentic,
|
indicating its identity. curl verifies whether the certificate is authentic,
|
||||||
i.e. that you can trust that the server is who the certificate says it is.
|
i.e. that you can trust that the server is who the certificate says it is.
|
||||||
This trust is based on a chain of digital signatures, rooted in certification
|
This trust is based on a chain of digital signatures, rooted in certification
|
||||||
authority (CA) certificates you supply. curl uses a default bundle of CA
|
authority (CA) certificates you supply. curl uses a default bundle of CA
|
||||||
|
|||||||
@ -29,7 +29,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E,
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Pass a CURL pointer in *dephandle* to identify the stream within the same
|
Pass a `CURL` pointer in *dephandle* to identify the stream within the same
|
||||||
connection that this stream is depending upon exclusively. That means it
|
connection that this stream is depending upon exclusively. That means it
|
||||||
depends on it and sets the Exclusive bit.
|
depends on it and sets the Exclusive bit.
|
||||||
|
|
||||||
|
|||||||
@ -1959,10 +1959,10 @@ typedef enum {
|
|||||||
/* Set stream weight, 1 - 256 (default is 16) */
|
/* Set stream weight, 1 - 256 (default is 16) */
|
||||||
CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239),
|
CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239),
|
||||||
|
|
||||||
/* Set stream dependency on another CURL handle */
|
/* Set stream dependency on another curl handle */
|
||||||
CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240),
|
CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240),
|
||||||
|
|
||||||
/* Set E-xclusive stream dependency on another CURL handle */
|
/* Set E-xclusive stream dependency on another curl handle */
|
||||||
CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241),
|
CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241),
|
||||||
|
|
||||||
/* Do not send any tftp option requests to the server */
|
/* Do not send any tftp option requests to the server */
|
||||||
|
|||||||
@ -78,7 +78,7 @@ CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
|
|||||||
*
|
*
|
||||||
* DESCRIPTION
|
* DESCRIPTION
|
||||||
*
|
*
|
||||||
* Re-initializes a CURL handle to the default values. This puts back the
|
* Re-initializes a curl handle to the default values. This puts back the
|
||||||
* handle to the same state as it was in when it was just created.
|
* handle to the same state as it was in when it was just created.
|
||||||
*
|
*
|
||||||
* It does keep: live connections, the Session ID cache, the DNS cache and the
|
* It does keep: live connections, the Session ID cache, the DNS cache and the
|
||||||
|
|||||||
@ -37,7 +37,7 @@ CURLcode Curl_macos_init(void)
|
|||||||
/*
|
/*
|
||||||
* The automagic conversion from IPv4 literals to IPv6 literals only
|
* The automagic conversion from IPv4 literals to IPv6 literals only
|
||||||
* works if the SCDynamicStoreCopyProxies system function gets called
|
* works if the SCDynamicStoreCopyProxies system function gets called
|
||||||
* first. As Curl currently does not support system-wide HTTP proxies, we
|
* first. As curl currently does not support system-wide HTTP proxies, we
|
||||||
* therefore do not use any value this function might return.
|
* therefore do not use any value this function might return.
|
||||||
*
|
*
|
||||||
* This function is only available on macOS and is not needed for
|
* This function is only available on macOS and is not needed for
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
/*
|
/*
|
||||||
CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
|
CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
|
||||||
to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every
|
to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every
|
||||||
CURL handle takes 45-50 K memory, therefore this 3K are not significant.
|
curl handle takes 6K memory, therefore this 3K are not significant.
|
||||||
*/
|
*/
|
||||||
#ifndef CURL_SOCKET_HASH_TABLE_SIZE
|
#ifndef CURL_SOCKET_HASH_TABLE_SIZE
|
||||||
#define CURL_SOCKET_HASH_TABLE_SIZE 911
|
#define CURL_SOCKET_HASH_TABLE_SIZE 911
|
||||||
|
|||||||
@ -370,7 +370,7 @@ static struct passwd *vms_getpwuid(uid_t uid)
|
|||||||
|
|
||||||
#define USE_UPPERCASE_KRBAPI 1
|
#define USE_UPPERCASE_KRBAPI 1
|
||||||
|
|
||||||
/* AI_NUMERICHOST needed for IP V6 support in Curl */
|
/* AI_NUMERICHOST needed for IP V6 support in curl */
|
||||||
#ifdef HAVE_NETDB_H
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#ifndef AI_NUMERICHOST
|
#ifndef AI_NUMERICHOST
|
||||||
|
|||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
struct ssl_peer;
|
struct ssl_peer;
|
||||||
|
|
||||||
/* Struct to hold a Curl OpenSSL instance */
|
/* Struct to hold a curl OpenSSL instance */
|
||||||
struct ossl_ctx {
|
struct ossl_ctx {
|
||||||
/* these ones requires specific SSL-types */
|
/* these ones requires specific SSL-types */
|
||||||
SSL_CTX* ssl_ctx;
|
SSL_CTX* ssl_ctx;
|
||||||
|
|||||||
@ -4,10 +4,10 @@ Implementation notes:
|
|||||||
This is a true OS/400 ILE implementation, not a PASE implementation (for
|
This is a true OS/400 ILE implementation, not a PASE implementation (for
|
||||||
PASE, use AIX implementation).
|
PASE, use AIX implementation).
|
||||||
|
|
||||||
The biggest problem with OS/400 is EBCDIC. Libcurl implements an internal
|
The biggest problem with OS/400 is EBCDIC. libcurl implements an internal
|
||||||
conversion mechanism, but it has been designed for computers that have a
|
conversion mechanism, but it has been designed for computers that have a
|
||||||
single native character set. OS/400 default native character set varies
|
single native character set. OS/400 default native character set varies
|
||||||
depending on the country for which it has been localized. And more, a job
|
depending on the country for which it has been localized. Further, a job
|
||||||
may dynamically alter its "native" character set.
|
may dynamically alter its "native" character set.
|
||||||
Several characters that do not have fixed code in EBCDIC variants are
|
Several characters that do not have fixed code in EBCDIC variants are
|
||||||
used in libcurl strings. As a consequence, using the existing conversion
|
used in libcurl strings. As a consequence, using the existing conversion
|
||||||
@ -33,7 +33,7 @@ NOT converted, so text gathered this way is (probably !) ASCII.
|
|||||||
Another OS/400 problem comes from the fact that the last fixed argument of a
|
Another OS/400 problem comes from the fact that the last fixed argument of a
|
||||||
vararg procedure may not be of type char, unsigned char, short or unsigned
|
vararg procedure may not be of type char, unsigned char, short or unsigned
|
||||||
short. Enums that are internally implemented by the C compiler as one of these
|
short. Enums that are internally implemented by the C compiler as one of these
|
||||||
types are also forbidden. Libcurl uses enums as vararg procedure tagfields...
|
types are also forbidden. libcurl uses enums as vararg procedure tagfields...
|
||||||
Happily, there is a pragma forcing enums to type "int". The original libcurl
|
Happily, there is a pragma forcing enums to type "int". The original libcurl
|
||||||
header files are thus altered during build process to use this pragma, in
|
header files are thus altered during build process to use this pragma, in
|
||||||
order to force libcurl enums of being type int (the pragma disposition in use
|
order to force libcurl enums of being type int (the pragma disposition in use
|
||||||
@ -201,7 +201,7 @@ _ curl_pushheader_bynum_cssid() and curl_pushheader_byname_ccsid()
|
|||||||
should be released with curl_free() after use, as opposite to the non-ccsid
|
should be released with curl_free() after use, as opposite to the non-ccsid
|
||||||
versions of these procedures.
|
versions of these procedures.
|
||||||
Please note that HTTP2 is not (yet) implemented on OS/400, thus these
|
Please note that HTTP2 is not (yet) implemented on OS/400, thus these
|
||||||
functions will always return NULL.
|
functions always return NULL.
|
||||||
|
|
||||||
_ curl_easy_option_by_name_ccsid() returns a pointer to an untranslated option
|
_ curl_easy_option_by_name_ccsid() returns a pointer to an untranslated option
|
||||||
metadata structure. As each curl_easyoption structure holds the option name in
|
metadata structure. As each curl_easyoption structure holds the option name in
|
||||||
@ -216,15 +216,15 @@ hout parameter is kept in libcurl's encoding and should not be altered.
|
|||||||
_ curl_from_ccsid() and curl_to_ccsid() are string encoding conversion
|
_ curl_from_ccsid() and curl_to_ccsid() are string encoding conversion
|
||||||
functions between ASCII (latin1) and the given CCSID. The first parameter is
|
functions between ASCII (latin1) and the given CCSID. The first parameter is
|
||||||
the source string, the second is the CCSID and the returned value is a pointer
|
the source string, the second is the CCSID and the returned value is a pointer
|
||||||
to the dynamically allocated string. These functions do not impact on Curl's
|
to the dynamically allocated string. These functions do not impact on curl's
|
||||||
behavior and are only provided for user convenience. After use, returned values
|
behavior and are only provided for user convenience. After use, returned values
|
||||||
must be released with curl_free().
|
must be released with curl_free().
|
||||||
|
|
||||||
|
|
||||||
Standard compilation environment does support neither autotools nor make;
|
Standard compilation environment does support neither autotools nor make; in
|
||||||
in fact, very few common utilities are available. As a consequence, the
|
fact, few common utilities are available. As a consequence, the config-os400.h
|
||||||
config-os400.h has been coded manually and the compilation scripts are
|
has been coded manually and the compilation scripts are a set of shell scripts
|
||||||
a set of shell scripts stored in subdirectory packages/OS400.
|
stored in subdirectory packages/OS400.
|
||||||
|
|
||||||
The test environment is currently not supported on OS/400.
|
The test environment is currently not supported on OS/400.
|
||||||
|
|
||||||
@ -259,7 +259,7 @@ _ TFTP
|
|||||||
Compiling on OS/400:
|
Compiling on OS/400:
|
||||||
|
|
||||||
These instructions targets people who knows about OS/400, compiling, IFS and
|
These instructions targets people who knows about OS/400, compiling, IFS and
|
||||||
archive extraction. Do not ask questions about these subjects if you're not
|
archive extraction. Do not ask questions about these subjects if you are not
|
||||||
familiar with.
|
familiar with.
|
||||||
|
|
||||||
_ As a prerequisite, QADRT development environment must be installed.
|
_ As a prerequisite, QADRT development environment must be installed.
|
||||||
@ -286,20 +286,20 @@ _ Enter the command "sh makefile.sh > makelog 2>&1"
|
|||||||
_ Examine the makelog file to check for compilation errors. CZM0383 warnings on
|
_ Examine the makelog file to check for compilation errors. CZM0383 warnings on
|
||||||
C or system standard API come from QADRT inlining and can safely be ignored.
|
C or system standard API come from QADRT inlining and can safely be ignored.
|
||||||
|
|
||||||
Without configuration parameters override, this will produce the following
|
Without configuration parameters override, this produces the following
|
||||||
OS/400 objects:
|
OS/400 objects:
|
||||||
_ Library CURL. All other objects will be stored in this library.
|
_ libcurl. All other objects are stored in this library.
|
||||||
_ Modules for all libcurl units.
|
_ Modules for all libcurl units.
|
||||||
_ Binding directory CURL_A, to be used at calling program link time for
|
_ Binding directory CURL_A, to be used at calling program link time for
|
||||||
statically binding the modules (specify BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)
|
statically binding the modules (specify BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)
|
||||||
when creating a program using CURL_A).
|
when creating a program using CURL_A).
|
||||||
_ Service program CURL.<soname>, where <soname> is extracted from the
|
_ Service program CURL.<soname>, where <soname> is extracted from the
|
||||||
lib/Makefile.am VERSION variable. To be used at calling program run-time
|
lib/Makefile.am VERSION variable. To be used at calling program runtime
|
||||||
when this program has dynamically bound curl at link time.
|
when this program has dynamically bound curl at link time.
|
||||||
_ Binding directory CURL. To be used to dynamically bind libcurl when linking a
|
_ Binding directory CURL. To be used to dynamically bind libcurl when linking a
|
||||||
calling program.
|
calling program.
|
||||||
- CLI tool bound program CURL.
|
- CLI tool bound program curl.
|
||||||
- CLI command CURL.
|
- CLI command curl.
|
||||||
_ Source file H. It contains all the include members needed to compile a C/C++
|
_ Source file H. It contains all the include members needed to compile a C/C++
|
||||||
module using libcurl, and an ILE/RPG /copy member for support in this
|
module using libcurl, and an ILE/RPG /copy member for support in this
|
||||||
language.
|
language.
|
||||||
|
|||||||
@ -10,8 +10,8 @@ Building via IDE Project Files
|
|||||||
This document describes how to compile, build and install curl and libcurl
|
This document describes how to compile, build and install curl and libcurl
|
||||||
from sources using legacy versions of Visual Studio 2010 - 2013.
|
from sources using legacy versions of Visual Studio 2010 - 2013.
|
||||||
|
|
||||||
You will need to generate the project files before using them. Please run
|
You need to generate the project files before using them. Please run "generate
|
||||||
"generate -help" for usage details.
|
-help" for usage details.
|
||||||
|
|
||||||
To generate project files for recent versions of Visual Studio instead, use
|
To generate project files for recent versions of Visual Studio instead, use
|
||||||
cmake. Refer to INSTALL-CMAKE in the docs directory.
|
cmake. Refer to INSTALL-CMAKE in the docs directory.
|
||||||
@ -43,7 +43,7 @@ a library is being compiled against dynamic runtime libraries.
|
|||||||
|
|
||||||
The projects files also support build configurations that require third party
|
The projects files also support build configurations that require third party
|
||||||
dependencies such as OpenSSL and libssh2. If you wish to support these, you
|
dependencies such as OpenSSL and libssh2. If you wish to support these, you
|
||||||
will also need to download and compile those libraries as well.
|
also need to download and compile those libraries as well.
|
||||||
|
|
||||||
To support compilation of these libraries using different versions of
|
To support compilation of these libraries using different versions of
|
||||||
compilers, the following directory structure has been used for both the output
|
compilers, the following directory structure has been used for both the output
|
||||||
@ -70,19 +70,19 @@ of curl and libcurl as well as these dependencies.
|
|||||||
|_VC <version>
|
|_VC <version>
|
||||||
|_<configuration>
|
|_<configuration>
|
||||||
|
|
||||||
As OpenSSL doesn't support side-by-side compilation when using different
|
As OpenSSL does not support side-by-side compilation when using different
|
||||||
versions of Visual Studio, a helper batch file has been provided to assist with
|
versions of Visual Studio, a helper batch file has been provided to assist
|
||||||
this. Please run `build-openssl -help` for usage details.
|
with this. Please run `build-openssl -help` for usage details.
|
||||||
|
|
||||||
## Building with Visual C++
|
## Building with Visual C++
|
||||||
|
|
||||||
To build with VC++, you will of course have to first install VC++ which is
|
To build with VC++, you have to first install VC++ which is part of Visual
|
||||||
part of Visual Studio.
|
Studio.
|
||||||
|
|
||||||
Once you have VC++ installed you should launch the application and open one of
|
Once you have VC++ installed you should launch the application and open one of
|
||||||
the solution or workspace files. The VC directory names are based on the
|
the solution or workspace files. The VC directory names are based on the
|
||||||
version of Visual C++ that you will be using. Each version of Visual Studio
|
version of Visual C++ that you use. Each version of Visual Studio has a
|
||||||
has a default version of Visual C++. We offer these versions:
|
default version of Visual C++. We offer these versions:
|
||||||
|
|
||||||
- VC10 (Visual Studio 2010 Version 10.0)
|
- VC10 (Visual Studio 2010 Version 10.0)
|
||||||
- VC11 (Visual Studio 2012 Version 11.0)
|
- VC11 (Visual Studio 2012 Version 11.0)
|
||||||
@ -99,9 +99,9 @@ use `VC10\curl-all.sln` to build curl and libcurl.
|
|||||||
## Running DLL based configurations
|
## Running DLL based configurations
|
||||||
|
|
||||||
If you are a developer and plan to run the curl tool from Visual Studio with
|
If you are a developer and plan to run the curl tool from Visual Studio with
|
||||||
any third-party libraries (such as OpenSSL or libssh2) then you will
|
any third-party libraries (such as OpenSSL or libssh2) then you need to add
|
||||||
need to add the search path of these DLLs to the configuration's PATH
|
the search path of these DLLs to the configuration's PATH environment. To do
|
||||||
environment. To do that:
|
that:
|
||||||
|
|
||||||
1. Open the 'curl-all.sln' or 'curl.sln' solutions
|
1. Open the 'curl-all.sln' or 'curl.sln' solutions
|
||||||
2. Right-click on the 'curl' project and select Properties
|
2. Right-click on the 'curl' project and select Properties
|
||||||
@ -122,8 +122,8 @@ DLL Debug - DLL OpenSSL (x64):
|
|||||||
C:\Windows;C:\Windows\System32\Wbem
|
C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
|
||||||
If you are using a configuration that uses multiple third-party library DLLs
|
If you are using a configuration that uses multiple third-party library DLLs
|
||||||
(such as DLL Debug - DLL OpenSSL - DLL libssh2) then 'Path to DLL' will need
|
(such as DLL Debug - DLL OpenSSL - DLL libssh2) then 'Path to DLL' need to
|
||||||
to contain the path to both of these.
|
contain the path to both of these.
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
@ -139,14 +139,14 @@ Should you wish to help out with some of the items on the TODO list, or find
|
|||||||
bugs in the project files that need correcting, and would like to submit
|
bugs in the project files that need correcting, and would like to submit
|
||||||
updated files back then please note that, whilst the solution files can be
|
updated files back then please note that, whilst the solution files can be
|
||||||
edited directly, the templates for the project files (which are stored in the
|
edited directly, the templates for the project files (which are stored in the
|
||||||
git repository) will need to be modified rather than the generated project
|
git repository) need to be modified rather than the generated project files
|
||||||
files that Visual Studio uses.
|
that Visual Studio uses.
|
||||||
|
|
||||||
## Legacy Windows and SSL
|
## Legacy Windows and SSL
|
||||||
|
|
||||||
Some of the project configurations use Schannel (Windows SSPI), the native SSL
|
Some of the project configurations use Schannel (Windows SSPI), the native SSL
|
||||||
library that comes with the Windows OS. Schannel in Windows 8 and earlier is
|
library that comes with the Windows OS. Schannel in Windows 8 and earlier is
|
||||||
not able to connect to servers that no longer support the legacy handshakes
|
not able to connect to servers that no longer support the legacy handshakes
|
||||||
and algorithms used by those versions. If you will be using curl in one of
|
and algorithms used by those versions. If you are using curl in one of those
|
||||||
those earlier versions of Windows you should choose another SSL backend like
|
earlier versions of Windows you should choose another SSL backend like
|
||||||
OpenSSL.
|
OpenSSL.
|
||||||
|
|||||||
@ -84,7 +84,7 @@ int is_vms_shell(void)
|
|||||||
* feature macro settings, and one of the exit routines is hidden at compile
|
* feature macro settings, and one of the exit routines is hidden at compile
|
||||||
* time.
|
* time.
|
||||||
*
|
*
|
||||||
* Since we want Curl to work properly under the VMS DCL shell and Unix
|
* Since we want curl to work properly under the VMS DCL shell and Unix
|
||||||
* shells under VMS, this routine should compile correctly regardless of
|
* shells under VMS, this routine should compile correctly regardless of
|
||||||
* the settings.
|
* the settings.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -6,7 +6,7 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
# Continuous Integration for curl
|
# Continuous Integration for curl
|
||||||
|
|
||||||
Curl runs in many different environments, so every change is run against a
|
curl runs in many different environments, so every change is run against a
|
||||||
large number of test suites.
|
large number of test suites.
|
||||||
|
|
||||||
Every pull request is verified for each of the following:
|
Every pull request is verified for each of the following:
|
||||||
@ -58,7 +58,7 @@ GitHub Actions runs the following tests:
|
|||||||
- macOS tests with a variety of different compilation options
|
- macOS tests with a variety of different compilation options
|
||||||
- Fuzz tests ([see the curl-fuzzer repo for more
|
- Fuzz tests ([see the curl-fuzzer repo for more
|
||||||
info](https://github.com/curl/curl-fuzzer)).
|
info](https://github.com/curl/curl-fuzzer)).
|
||||||
- Curl compiled using the Rust TLS backend with Hyper
|
- curl compiled using the Rust TLS backend with Hyper
|
||||||
|
|
||||||
These are each configured in different files in `.github/workflows`.
|
These are each configured in different files in `.github/workflows`.
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,9 @@ This is an additional test suite using a combination of Apache httpd and nghttpx
|
|||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
The test cases and necessary files are in `tests/http`. You can invoke `pytest` from there or from the top level curl checkout and it will find all tests.
|
The test cases and necessary files are in `tests/http`. You can invoke
|
||||||
|
`pytest` from there or from the top level curl checkout and it finds all
|
||||||
|
tests.
|
||||||
|
|
||||||
```
|
```
|
||||||
curl> pytest test/http
|
curl> pytest test/http
|
||||||
@ -29,16 +31,18 @@ curl/tests/http> pytest -vv -k test_01_02
|
|||||||
|
|
||||||
runs all test cases that have `test_01_02` in their name. This does not have to be the start of the name.
|
runs all test cases that have `test_01_02` in their name. This does not have to be the start of the name.
|
||||||
|
|
||||||
Depending on your setup, some test cases may be skipped and appear as `s` in the output. If you run pytest verbose, it will also give you the reason for skipping.
|
Depending on your setup, some test cases may be skipped and appear as `s` in
|
||||||
|
the output. If you run pytest verbose, it also gives you the reason for
|
||||||
|
skipping.
|
||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
|
|
||||||
You will need:
|
You need:
|
||||||
|
|
||||||
1. a recent Python, the `cryptography` module and, of course, `pytest`
|
1. a recent Python, the `cryptography` module and, of course, `pytest`
|
||||||
2. an apache httpd development version. On Debian/Ubuntu, the package `apache2-dev` has this.
|
2. an apache httpd development version. On Debian/Ubuntu, the package `apache2-dev` has this
|
||||||
3. a local `curl` project build
|
3. a local `curl` project build
|
||||||
3. optionally, a `nghttpx` with HTTP/3 enabled or h3 test cases will be skipped.
|
3. optionally, a `nghttpx` with HTTP/3 enabled or h3 test cases are skipped
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
@ -85,12 +89,23 @@ There is a lot of [`pytest` documentation](https://docs.pytest.org/) with exampl
|
|||||||
|
|
||||||
In `conftest.py` 3 "fixtures" are defined that are used by all test cases:
|
In `conftest.py` 3 "fixtures" are defined that are used by all test cases:
|
||||||
|
|
||||||
1. `env`: the test environment. It is an instance of class `testenv/env.py:Env`. It holds all information about paths, availability of features (HTTP/3), port numbers to use, domains and SSL certificates for those.
|
1. `env`: the test environment. It is an instance of class
|
||||||
2. `httpd`: the Apache httpd instance, configured and started, then stopped at the end of the test suite. It has sites configured for the domains from `env`. It also loads a local module `mod_curltest?` and makes it available in certain locations. (more on mod_curltest below).
|
`testenv/env.py:Env`. It holds all information about paths, availability of
|
||||||
3. `nghttpx`: an instance of nghttpx that provides HTTP/3 support. `nghttpx` proxies those requests to the `httpd` server. In a direct mapping, so you may access all the resources under the same path as with HTTP/2. Only the port number used for HTTP/3 requests will be different.
|
features (HTTP/3), port numbers to use, domains and SSL certificates for
|
||||||
|
those.
|
||||||
|
2. `httpd`: the Apache httpd instance, configured and started, then stopped at
|
||||||
|
the end of the test suite. It has sites configured for the domains from
|
||||||
|
`env`. It also loads a local module `mod_curltest?` and makes it available
|
||||||
|
in certain locations. (more on mod_curltest below).
|
||||||
|
3. `nghttpx`: an instance of nghttpx that provides HTTP/3 support. `nghttpx`
|
||||||
|
proxies those requests to the `httpd` server. In a direct mapping, so you
|
||||||
|
may access all the resources under the same path as with HTTP/2. Only the
|
||||||
|
port number used for HTTP/3 requests are different.
|
||||||
|
|
||||||
`pytest` manages these fixture so that they are created once and terminated before exit. This means you can `Ctrl-C` a running pytest and the server will shutdown. Only when you brutally chop its head off, might there be servers left
|
`pytest` manages these fixture so that they are created once and terminated
|
||||||
behind.
|
before exit. This means you can `Ctrl-C` a running pytest and the server then
|
||||||
|
shutdowns. Only when you brutally chop its head off, might there be servers
|
||||||
|
left behind.
|
||||||
|
|
||||||
### Test Cases
|
### Test Cases
|
||||||
|
|
||||||
@ -126,4 +141,10 @@ The module adds 2 "handlers" to the Apache server (right now). Handler are piece
|
|||||||
* `s`: seconds (the default)
|
* `s`: seconds (the default)
|
||||||
* `ms`: milliseconds
|
* `ms`: milliseconds
|
||||||
|
|
||||||
As you can see, `mod_curltest`'s tweak handler allow to simulate many kinds of responses. An example of its use is `test_03_01` where responses are delayed using `chunk_delay`. This gives the response a defined duration and the test uses that to reload `httpd` in the middle of the first request. A graceful reload in httpd lets ongoing requests finish, but will close the connection afterwards and tear down the serving process. The following request need then to open a new connection. This is verified by the test case.
|
As you can see, `mod_curltest`'s tweak handler allow to simulate many kinds of
|
||||||
|
responses. An example of its use is `test_03_01` where responses are delayed
|
||||||
|
using `chunk_delay`. This gives the response a defined duration and the test
|
||||||
|
uses that to reload `httpd` in the middle of the first request. A graceful
|
||||||
|
reload in httpd lets ongoing requests finish, but closes the connection
|
||||||
|
afterwards and tears down the serving process. The following request then
|
||||||
|
needs to open a new connection. This is verified by the test case.
|
||||||
|
|||||||
@ -46,7 +46,7 @@ CURLcode test(char *URL)
|
|||||||
|
|
||||||
global_init(CURL_GLOBAL_ALL);
|
global_init(CURL_GLOBAL_ALL);
|
||||||
|
|
||||||
/* Allocate one CURL handle per transfer */
|
/* Allocate one curl handle per transfer */
|
||||||
easy = curl_easy_init();
|
easy = curl_easy_init();
|
||||||
|
|
||||||
/* init a multi stack */
|
/* init a multi stack */
|
||||||
@ -152,7 +152,7 @@ CURLcode test(char *URL)
|
|||||||
test_cleanup:
|
test_cleanup:
|
||||||
curl_multi_cleanup(multi_handle);
|
curl_multi_cleanup(multi_handle);
|
||||||
|
|
||||||
/* Free the CURL handles */
|
/* Free the curl handles */
|
||||||
curl_easy_cleanup(easy);
|
curl_easy_cleanup(easy);
|
||||||
curl_global_cleanup();
|
curl_global_cleanup();
|
||||||
|
|
||||||
|
|||||||
@ -12,9 +12,9 @@ big and complicated, we should split them into smaller and testable ones.
|
|||||||
## Build Unit Tests
|
## Build Unit Tests
|
||||||
|
|
||||||
`./configure --enable-debug` is required for the unit tests to build. To
|
`./configure --enable-debug` is required for the unit tests to build. To
|
||||||
enable unit tests, there will be a separate static libcurl built that will be
|
enable unit tests, there is a separate static libcurl built that is used
|
||||||
used exclusively for linking unit test programs. Just build everything as
|
exclusively for linking unit test programs. Just build everything as normal,
|
||||||
normal, and then you can run the unit test cases as well.
|
and then you can run the unit test cases as well.
|
||||||
|
|
||||||
## Run Unit Tests
|
## Run Unit Tests
|
||||||
|
|
||||||
@ -25,8 +25,8 @@ can `cd tests` and `make` and then invoke individual unit tests with
|
|||||||
|
|
||||||
## Debug Unit Tests
|
## Debug Unit Tests
|
||||||
|
|
||||||
If a specific test fails you will get told. The test case then has output left
|
If a specific test fails you get told. The test case then has output left in
|
||||||
in the %LOGDIR subdirectory, but most importantly you can re-run the test again
|
the %LOGDIR subdirectory, but most importantly you can re-run the test again
|
||||||
using gdb by doing `./runtests.pl -g NNNN`. That is, add a `-g` to make it
|
using gdb by doing `./runtests.pl -g NNNN`. That is, add a `-g` to make it
|
||||||
start up gdb and run the same case using that.
|
start up gdb and run the same case using that.
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ source file. The source file should be named `unitNNNN.c` where `NNNN` is a
|
|||||||
previously unused number.
|
previously unused number.
|
||||||
|
|
||||||
Add your test to `tests/unit/Makefile.inc` (if it is a unit test). Add your
|
Add your test to `tests/unit/Makefile.inc` (if it is a unit test). Add your
|
||||||
test data file name to `tests/data/Makefile.am`
|
test data filename to `tests/data/Makefile.am`
|
||||||
|
|
||||||
You also need a separate file called `tests/data/testNNNN` (using the same
|
You also need a separate file called `tests/data/testNNNN` (using the same
|
||||||
number) that describes your test case. See the test1300 file for inspiration
|
number) that describes your test case. See the test1300 file for inspiration
|
||||||
|
|||||||
@ -7,10 +7,9 @@ SPDX-License-Identifier: curl
|
|||||||
# Building curl with Visual C++
|
# Building curl with Visual C++
|
||||||
|
|
||||||
This document describes how to compile, build and install curl and libcurl
|
This document describes how to compile, build and install curl and libcurl
|
||||||
from sources using the Visual C++ build tool. To build with VC++, you will of
|
from sources using the Visual C++ build tool. To build with VC++, you have to
|
||||||
course have to first install VC++. The minimum required version of VC is 6
|
first install VC++. The minimum required version of VC is 6 (part of Visual
|
||||||
(part of Visual Studio 6). However using a more recent version is strongly
|
Studio 6). However using a more recent version is strongly recommended.
|
||||||
recommended.
|
|
||||||
|
|
||||||
VC++ is also part of the Windows Platform SDK. You do not have to install the
|
VC++ is also part of the Windows Platform SDK. You do not have to install the
|
||||||
full Visual Studio or Visual C++ if all you want is to build curl.
|
full Visual Studio or Visual C++ if all you want is to build curl.
|
||||||
@ -21,8 +20,8 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
If you wish to support zlib, OpenSSL, c-ares, ssh2, you will have to download
|
If you wish to support zlib, OpenSSL, c-ares, ssh2, you have to download them
|
||||||
them separately and copy them to the `deps` directory as shown below:
|
separately and copy them to the `deps` directory as shown below:
|
||||||
|
|
||||||
somedirectory\
|
somedirectory\
|
||||||
|_curl-src
|
|_curl-src
|
||||||
@ -62,14 +61,14 @@ Open a Visual Studio Command prompt:
|
|||||||
|
|
||||||
## Build in the console
|
## Build in the console
|
||||||
|
|
||||||
Once you are in the console, go to the winbuild directory in the Curl
|
Once you are in the console, go to the winbuild directory in the curl
|
||||||
sources:
|
sources:
|
||||||
|
|
||||||
cd curl-src\winbuild
|
cd curl-src\winbuild
|
||||||
|
|
||||||
Then you can call `nmake /f Makefile.vc` with the desired options (see
|
Then you can call `nmake /f Makefile.vc` with the desired options (see
|
||||||
below). The builds will be in the top src directory, `builds\` directory, in
|
below). The builds are in the top src directory, `builds\` directory, in a
|
||||||
a directory named using the options given to the nmake call.
|
directory named using the options given to the nmake call.
|
||||||
|
|
||||||
nmake /f Makefile.vc mode=<static or dll> <options>
|
nmake /f Makefile.vc mode=<static or dll> <options>
|
||||||
|
|
||||||
@ -124,12 +123,12 @@ where `<options>` is one or many of:
|
|||||||
|
|
||||||
## Static linking of Microsoft's C runtime (CRT):
|
## Static linking of Microsoft's C runtime (CRT):
|
||||||
|
|
||||||
If you are using mode=static nmake will create and link to the static build
|
If you are using mode=static, nmake creates and links to the static build of
|
||||||
of libcurl but *not* the static CRT. If you must you can force nmake to link
|
libcurl but *not* the static CRT. If you must you can force nmake to link in
|
||||||
in the static CRT by passing `RTLIBCFG=static`. Typically you shouldn't use
|
the static CRT by passing `RTLIBCFG=static`. Typically you shouldn't use that
|
||||||
that option, and nmake will default to the DLL CRT. `RTLIBCFG` is rarely used
|
option, and nmake defaults to the DLL CRT. `RTLIBCFG` is rarely used and
|
||||||
and therefore rarely tested. When passing `RTLIBCFG` for a configuration that
|
therefore rarely tested. When passing `RTLIBCFG` for a configuration that was
|
||||||
was already built but not with that option, or if the option was specified
|
already built but not with that option, or if the option was specified
|
||||||
differently, you must destroy the build directory containing the
|
differently, you must destroy the build directory containing the
|
||||||
configuration so that nmake can build it from scratch.
|
configuration so that nmake can build it from scratch.
|
||||||
|
|
||||||
@ -139,17 +138,17 @@ where `<options>` is one or many of:
|
|||||||
|
|
||||||
## Building your own application with libcurl (Visual Studio example)
|
## Building your own application with libcurl (Visual Studio example)
|
||||||
|
|
||||||
When you build curl and libcurl, nmake will show the relative path where the
|
When you build curl and libcurl, nmake shows the relative path where the
|
||||||
output directory is. The output directory is named from the options nmake used
|
output directory is. The output directory is named from the options nmake
|
||||||
when building. You may also see temp directories of the same name but with
|
used when building. You may also see temp directories of the same name but
|
||||||
suffixes -obj-curl and -obj-lib.
|
with suffixes -obj-curl and -obj-lib.
|
||||||
|
|
||||||
For example let's say you've built curl.exe and libcurl.dll from the Visual
|
For example let's say you have built curl.exe and libcurl.dll from the Visual
|
||||||
Studio 2010 x64 Win64 Command Prompt:
|
Studio 2010 x64 Win64 Command Prompt:
|
||||||
|
|
||||||
nmake /f Makefile.vc mode=dll VC=10
|
nmake /f Makefile.vc mode=dll VC=10
|
||||||
|
|
||||||
The output directory will have a name similar to
|
The output directory has a name similar to
|
||||||
`..\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel`.
|
`..\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel`.
|
||||||
|
|
||||||
The output directory contains subdirectories bin, lib and include. Those are
|
The output directory contains subdirectories bin, lib and include. Those are
|
||||||
@ -177,14 +176,14 @@ where `<options>` is one or many of:
|
|||||||
need to make a separate x86 build of libcurl.
|
need to make a separate x86 build of libcurl.
|
||||||
|
|
||||||
If you build libcurl static (`mode=static`) or debug (`DEBUG=yes`) then the
|
If you build libcurl static (`mode=static`) or debug (`DEBUG=yes`) then the
|
||||||
library name will vary and separate builds may be necessary for separate
|
library name varies and separate builds may be necessary for separate
|
||||||
configurations of your project within the same platform. This is discussed in
|
configurations of your project within the same platform. This is discussed in
|
||||||
the next section.
|
the next section.
|
||||||
|
|
||||||
## Building your own application with a static libcurl
|
## Building your own application with a static libcurl
|
||||||
|
|
||||||
When building an application that uses the static libcurl library on Windows,
|
When building an application that uses the static libcurl library on Windows,
|
||||||
you must define `CURL_STATICLIB`. Otherwise the linker will look for dynamic
|
you must define `CURL_STATICLIB`. Otherwise the linker looks for dynamic
|
||||||
import symbols.
|
import symbols.
|
||||||
|
|
||||||
The static library name has an `_a` suffix in the basename and the debug
|
The static library name has an `_a` suffix in the basename and the debug
|
||||||
@ -201,8 +200,8 @@ where `<options>` is one or many of:
|
|||||||
## Legacy Windows and SSL
|
## Legacy Windows and SSL
|
||||||
|
|
||||||
When you build curl using the build files in this directory the default SSL
|
When you build curl using the build files in this directory the default SSL
|
||||||
backend will be Schannel (Windows SSPI), the native SSL library that comes
|
backend is Schannel (Windows SSPI), the native SSL library that comes with
|
||||||
with the Windows OS. Schannel in Windows 8 and earlier is not able to connect
|
the Windows OS. Schannel in Windows 8 and earlier is not able to connect to
|
||||||
to servers that no longer support the legacy handshakes and algorithms used by
|
servers that no longer support the legacy handshakes and algorithms used by
|
||||||
those versions. If you will be using curl in one of those earlier versions of
|
those versions. If you are using curl in one of those earlier versions of
|
||||||
Windows you should choose another SSL backend like OpenSSL.
|
Windows you should choose another SSL backend like OpenSSL.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user