CURLOPT_PREREQFUNCTION: add new callback

Triggered before a request is made but after a connection is set up

Changes:

- callback: Update docs and callback for pre-request callback
- Add documentation for CURLOPT_PREREQDATA and CURLOPT_PREREQFUNCTION,
- Add redirect test and callback failure test
- Note that the function may be called multiple times on a redirection
- Disable new 2086 test due to Windows weirdness

Closes #7477
This commit is contained in:
Max Dymond 2021-07-22 15:32:30 +01:00 committed by Daniel Stenberg
parent 06981ba7f6
commit a517378de5
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
21 changed files with 602 additions and 4 deletions

View file

@ -29,6 +29,8 @@
# test 1801 causes problems on Mac OS X and github
# https://github.com/curl/curl/issues/380
1801
# test 2086 causes issues on Windows only
2086
#
#
# Tests that are disabled here for Hyper are SUPPOSED to work but

View file

@ -229,7 +229,7 @@ test2064 test2065 test2066 test2067 test2068 test2069 \
test2064 test2065 test2066 test2067 test2068 test2069 test2070 \
test2071 test2072 test2073 test2074 test2075 test2076 test2077 \
test2078 \
test2080 test2081 \
test2080 test2081 test2082 test2083 test2084 test2085 test2086 \
\
test2100 \
\

51
tests/data/test2082 Normal file
View file

@ -0,0 +1,51 @@
<testcase>
<info>
<keywords>
HTTP
</keywords>
</info>
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Content-Length: 0
</data>
</reply>
# Client-side
<client>
<server>
http
</server>
<name>
Pre-request callback for HTTP
</name>
<tool>
libprereq
</tool>
<command>
%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<stripfile>
s/^Local port = \d+/Local port = stripped/
</stripfile>
<stdout>
Connected to %HOSTIP
Connected from %CLIENTIP
Remote port = %HTTPPORT
Local port = stripped
Returning = 0
</stdout>
</verify>
</testcase>

45
tests/data/test2083 Normal file
View file

@ -0,0 +1,45 @@
<testcase>
<info>
<keywords>
FTP
</keywords>
</info>
# Server-side
<reply>
<data>
</data>
</reply>
# Client-side
<client>
<server>
ftp
</server>
<name>
Pre-request callback for FTP
</name>
<tool>
libprereq
</tool>
<command>
ftp://%HOSTIP:%FTPPORT/test-%TESTNUMBER/
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<stripfile>
s/^Local port = \d+/Local port = stripped/
</stripfile>
<stdout>
Connected to %HOSTIP
Connected from %CLIENTIP
Remote port = %FTPPORT
Local port = stripped
Returning = 0
</stdout>
</verify>
</testcase>

54
tests/data/test2084 Normal file
View file

@ -0,0 +1,54 @@
<testcase>
<info>
<keywords>
HTTP
</keywords>
</info>
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Content-Length: 0
</data>
</reply>
# Client-side
<client>
<server>
http
</server>
<name>
Pre-request callback for HTTP with callback terminating transfer
</name>
<tool>
libprereq
</tool>
<command>
%HOSTIP:%HTTPPORT/%TESTNUMBER#err
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<errorcode>
42
</errorcode>
<stripfile>
s/^Local port = \d+/Local port = stripped/
</stripfile>
<stdout>
Connected to %HOSTIP
Connected from %CLIENTIP
Remote port = %HTTPPORT
Local port = stripped
Returning = 1
</stdout>
</verify>
</testcase>

64
tests/data/test2085 Normal file
View file

@ -0,0 +1,64 @@
<testcase>
<info>
<keywords>
HTTP
followlocation
</keywords>
</info>
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 302 OK swsclose
Location: data2.html/%TESTNUMBER0002
Date: Tue, 09 Nov 2010 14:49:00 GMT
Connection: close
</data>
<data2 nocheck="yes">
HTTP/1.1 200 OK swsclose
Location: this should be ignored
Date: Tue, 09 Nov 2010 14:49:00 GMT
Connection: close
body
</data2>
</reply>
# Client-side
<client>
<server>
http
</server>
<name>
Pre-request callback for HTTP with location following
</name>
<tool>
libprereq
</tool>
<command>
%HOSTIP:%HTTPPORT/%TESTNUMBER#redir
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<stripfile>
s/^Local port = \d+/Local port = stripped/
</stripfile>
<stdout>
Connected to %HOSTIP
Connected from %CLIENTIP
Remote port = %HTTPPORT
Local port = stripped
Returning = 0
Connected to %HOSTIP
Connected from %CLIENTIP
Remote port = %HTTPPORT
Local port = stripped
Returning = 0
</stdout>
</verify>
</testcase>

52
tests/data/test2086 Normal file
View file

@ -0,0 +1,52 @@
<testcase>
<info>
<keywords>
HTTP
IPv6
</keywords>
</info>
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Content-Length: 0
</data>
</reply>
# Client-side
<client>
<server>
http-ipv6
</server>
<name>
Pre-request callback for HTTP IPv6
</name>
<tool>
libprereq
</tool>
<command>
%HOST6IP:%HTTP6PORT/%TESTNUMBER#ipv6
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<stripfile>
s/^Local port = \d+/Local port = stripped/
</stripfile>
<stdout>
Connected to %HOST6IP
Connected from %CLIENT6IP
Remote port = %HTTP6PORT
Local port = stripped
Returning = 0
</stdout>
</verify>
</testcase>