When the legacy CURLOPT_HTTPPOST option is used, it gets converted into
the modem mimpost struct at first use. This data is (now) kept for the
entire transfer and not only per single HTTP request. This re-enables
rewind in the beginning of the second request instead of in end of the
first, as brought by 1b39731.
The request struct is per-request data only.
Extend test 650 to verify.
Fixes #11680
Reported-by: yushicheng7788 on github
Closes #11682
244 lines
4.8 KiB
Plaintext
244 lines
4.8 KiB
Plaintext
<testcase>
|
|
<info>
|
|
<keywords>
|
|
HTTP
|
|
HTTP POST
|
|
FORM
|
|
</keywords>
|
|
</info>
|
|
|
|
#
|
|
# Server-side
|
|
<reply>
|
|
<data nocheck="yes">
|
|
HTTP/1.1 301 OK
|
|
Date: Tue, 09 Nov 2010 14:49:00 GMT
|
|
Server: test-server/fake swsclose
|
|
Connection: close
|
|
Content-Type: text/html
|
|
Location: /%TESTNUMBER0002
|
|
|
|
hello
|
|
</data>
|
|
<data2 crlf="yes">
|
|
HTTP/1.1 200 OK
|
|
Date: Tue, 09 Nov 2010 14:49:00 GMT
|
|
Server: test-server/fake
|
|
Content-Length: 6
|
|
Connection: close
|
|
Content-Type: text/html
|
|
|
|
-foo-
|
|
</data>
|
|
</reply>
|
|
|
|
# Client-side
|
|
<client>
|
|
<features>
|
|
form-api
|
|
</features>
|
|
<server>
|
|
http
|
|
</server>
|
|
# tool is what to use instead of 'curl'
|
|
<tool>
|
|
lib%TESTNUMBER
|
|
</tool>
|
|
|
|
<name>
|
|
HTTP formpost using form API - with redirect and re-POST
|
|
</name>
|
|
<stdin>
|
|
Some data from stdin
|
|
</stdin>
|
|
<command>
|
|
http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/test%TESTNUMBER.filedata
|
|
</command>
|
|
<file name="%LOGDIR/test%TESTNUMBER.filedata">
|
|
This is data from a file.
|
|
</file>
|
|
</client>
|
|
|
|
#
|
|
# Verify data after the test has been "shot"
|
|
<verify>
|
|
<strippart>
|
|
s/^--------------------------[a-z0-9]*/------------------------------/
|
|
s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
|
|
</strippart>
|
|
# Note that the stripping above removes 12 bytes from every occurrence of the
|
|
# boundary string and since 5 of them are in the body contents, we see
|
|
# (5*12) == 60 bytes less
|
|
<protocol>
|
|
POST /%TESTNUMBER HTTP/1.1
|
|
Host: %HOSTIP:%HTTPPORT
|
|
Accept: */*
|
|
Transfer-Encoding: chunked
|
|
Content-Type: multipart/form-data; boundary=----------------------------
|
|
Expect: 100-continue
|
|
|
|
361
|
|
------------------------------
|
|
Content-Disposition: form-data; name="fieldname"
|
|
Content-Type: text/plain
|
|
X-customheader-1: Header 1 data
|
|
X-customheader-2: Header 2 data
|
|
|
|
this is what we post to the silly web server
|
|
------------------------------
|
|
Content-Disposition: form-data; name="fieldnam"
|
|
|
|
uhis is what we post to the silly web serve
|
|
------------------------------
|
|
Content-Disposition: form-data; name="multifile"
|
|
Content-Type: multipart/mixed; boundary=----------------------------
|
|
|
|
------------------------------
|
|
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
|
|
Content-Type: application/octet-stream
|
|
|
|
This is data from a file.
|
|
|
|
------------------------------
|
|
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
|
|
Content-Type: text/whatever
|
|
|
|
|
|
%if hyper
|
|
A5
|
|
%else
|
|
a5
|
|
%endif
|
|
This is data from a file.
|
|
|
|
------------------------------
|
|
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
|
|
Content-Type: text/whatever
|
|
|
|
|
|
%if hyper
|
|
AF
|
|
%else
|
|
af
|
|
%endif
|
|
This is data from a file.
|
|
|
|
--------------------------------
|
|
|
|
------------------------------
|
|
Content-Disposition: form-data; name="filecontents"
|
|
|
|
|
|
%if hyper
|
|
10F
|
|
%else
|
|
10f
|
|
%endif
|
|
This is data from a file.
|
|
|
|
------------------------------
|
|
Content-Disposition: form-data; name="formlength"
|
|
|
|
1367
|
|
------------------------------
|
|
Content-Disposition: form-data; name="standardinput"
|
|
Content-Type: application/octet-stream
|
|
|
|
|
|
16
|
|
Some data from stdin
|
|
|
|
30
|
|
|
|
--------------------------------
|
|
|
|
0
|
|
|
|
POST /%TESTNUMBER0002 HTTP/1.1
|
|
Host: %HOSTIP:%HTTPPORT
|
|
Accept: */*
|
|
Transfer-Encoding: chunked
|
|
Content-Type: multipart/form-data; boundary=----------------------------
|
|
Expect: 100-continue
|
|
|
|
361
|
|
------------------------------
|
|
Content-Disposition: form-data; name="fieldname"
|
|
Content-Type: text/plain
|
|
X-customheader-1: Header 1 data
|
|
X-customheader-2: Header 2 data
|
|
|
|
this is what we post to the silly web server
|
|
------------------------------
|
|
Content-Disposition: form-data; name="fieldnam"
|
|
|
|
uhis is what we post to the silly web serve
|
|
------------------------------
|
|
Content-Disposition: form-data; name="multifile"
|
|
Content-Type: multipart/mixed; boundary=----------------------------
|
|
|
|
------------------------------
|
|
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
|
|
Content-Type: application/octet-stream
|
|
|
|
This is data from a file.
|
|
|
|
------------------------------
|
|
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
|
|
Content-Type: text/whatever
|
|
|
|
|
|
%if hyper
|
|
A5
|
|
%else
|
|
a5
|
|
%endif
|
|
This is data from a file.
|
|
|
|
------------------------------
|
|
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
|
|
Content-Type: text/whatever
|
|
|
|
|
|
%if hyper
|
|
AF
|
|
%else
|
|
af
|
|
%endif
|
|
This is data from a file.
|
|
|
|
--------------------------------
|
|
|
|
------------------------------
|
|
Content-Disposition: form-data; name="filecontents"
|
|
|
|
|
|
%if hyper
|
|
10F
|
|
%else
|
|
10f
|
|
%endif
|
|
This is data from a file.
|
|
|
|
------------------------------
|
|
Content-Disposition: form-data; name="formlength"
|
|
|
|
1367
|
|
------------------------------
|
|
Content-Disposition: form-data; name="standardinput"
|
|
Content-Type: application/octet-stream
|
|
|
|
|
|
16
|
|
Some data from stdin
|
|
|
|
30
|
|
|
|
--------------------------------
|
|
|
|
0
|
|
|
|
</protocol>
|
|
</verify>
|
|
</testcase>
|