xref: /aosp_15_r20/external/curl/tests/data/test1404 (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker<testcase>
2*6236dae4SAndroid Build Coastguard Worker# Based on test 1315
3*6236dae4SAndroid Build Coastguard Worker<info>
4*6236dae4SAndroid Build Coastguard Worker<keywords>
5*6236dae4SAndroid Build Coastguard WorkerHTTP
6*6236dae4SAndroid Build Coastguard WorkerHTTP FORMPOST
7*6236dae4SAndroid Build Coastguard WorkerHTTP file upload
8*6236dae4SAndroid Build Coastguard Worker--libcurl
9*6236dae4SAndroid Build Coastguard Worker</keywords>
10*6236dae4SAndroid Build Coastguard Worker</info>
11*6236dae4SAndroid Build Coastguard Worker
12*6236dae4SAndroid Build Coastguard Worker# Server-side
13*6236dae4SAndroid Build Coastguard Worker<reply>
14*6236dae4SAndroid Build Coastguard Worker<data>
15*6236dae4SAndroid Build Coastguard WorkerHTTP/1.1 200 OK
16*6236dae4SAndroid Build Coastguard WorkerDate: Thu, 29 Jul 2008 14:49:00 GMT
17*6236dae4SAndroid Build Coastguard WorkerServer: test-server/fake
18*6236dae4SAndroid Build Coastguard WorkerContent-Length: 0
19*6236dae4SAndroid Build Coastguard WorkerConnection: close
20*6236dae4SAndroid Build Coastguard Worker
21*6236dae4SAndroid Build Coastguard Worker</data>
22*6236dae4SAndroid Build Coastguard Worker</reply>
23*6236dae4SAndroid Build Coastguard Worker
24*6236dae4SAndroid Build Coastguard Worker# Client-side
25*6236dae4SAndroid Build Coastguard Worker<client>
26*6236dae4SAndroid Build Coastguard Worker<features>
27*6236dae4SAndroid Build Coastguard WorkerMime
28*6236dae4SAndroid Build Coastguard Worker</features>
29*6236dae4SAndroid Build Coastguard Worker<server>
30*6236dae4SAndroid Build Coastguard Workerhttp
31*6236dae4SAndroid Build Coastguard Worker</server>
32*6236dae4SAndroid Build Coastguard Worker<name>
33*6236dae4SAndroid Build Coastguard Worker--libcurl for HTTP RFC1867-type formposting - -F with 3 files, one with explicit type & encoder
34*6236dae4SAndroid Build Coastguard Worker</name>
35*6236dae4SAndroid Build Coastguard Worker<setenv>
36*6236dae4SAndroid Build Coastguard WorkerSSL_CERT_FILE=
37*6236dae4SAndroid Build Coastguard Worker</setenv>
38*6236dae4SAndroid Build Coastguard Worker<command>
39*6236dae4SAndroid Build Coastguard Workerhttp://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=value -F 'file=@%LOGDIR/test%TESTNUMBER.txt,%LOGDIR/test%TESTNUMBER.txt;type=magic/content;encoder=8bit,%LOGDIR/test%TESTNUMBER.txt;headers=X-testheader-1: header 1;headers=X-testheader-2: header 2' --libcurl %LOGDIR/test%TESTNUMBER.c
40*6236dae4SAndroid Build Coastguard Worker</command>
41*6236dae4SAndroid Build Coastguard Worker# We create this file before the command is invoked!
42*6236dae4SAndroid Build Coastguard Worker<file name="%LOGDIR/test%TESTNUMBER.txt">
43*6236dae4SAndroid Build Coastguard Workerdummy data
44*6236dae4SAndroid Build Coastguard Worker</file>
45*6236dae4SAndroid Build Coastguard Worker</client>
46*6236dae4SAndroid Build Coastguard Worker
47*6236dae4SAndroid Build Coastguard Worker# Verify data after the test has been "shot"
48*6236dae4SAndroid Build Coastguard Worker<verify>
49*6236dae4SAndroid Build Coastguard Worker<strip>
50*6236dae4SAndroid Build Coastguard Worker-----+\w+
51*6236dae4SAndroid Build Coastguard Worker</strip>
52*6236dae4SAndroid Build Coastguard Worker<protocol>
53*6236dae4SAndroid Build Coastguard WorkerPOST /we/want/%TESTNUMBER HTTP/1.1
54*6236dae4SAndroid Build Coastguard WorkerHost: %HOSTIP:%HTTPPORT
55*6236dae4SAndroid Build Coastguard WorkerUser-Agent: curl/%VERSION
56*6236dae4SAndroid Build Coastguard WorkerAccept: */*
57*6236dae4SAndroid Build Coastguard WorkerContent-Length: 930
58*6236dae4SAndroid Build Coastguard WorkerContent-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Worker------------------------------9ef8d6205763
61*6236dae4SAndroid Build Coastguard WorkerContent-Disposition: form-data; name="name"
62*6236dae4SAndroid Build Coastguard Worker
63*6236dae4SAndroid Build Coastguard Workervalue
64*6236dae4SAndroid Build Coastguard Worker------------------------------9ef8d6205763
65*6236dae4SAndroid Build Coastguard WorkerContent-Disposition: form-data; name="file"
66*6236dae4SAndroid Build Coastguard WorkerContent-Type: multipart/mixed; boundary=----------------------------aaaaaaaaaaaa
67*6236dae4SAndroid Build Coastguard Worker
68*6236dae4SAndroid Build Coastguard WorkerContent-Disposition: attachment; filename="test%TESTNUMBER.txt"
69*6236dae4SAndroid Build Coastguard WorkerContent-Type: text/plain
70*6236dae4SAndroid Build Coastguard Worker
71*6236dae4SAndroid Build Coastguard Workerdummy data
72*6236dae4SAndroid Build Coastguard Worker
73*6236dae4SAndroid Build Coastguard Worker------------------------------9ef8d6205763
74*6236dae4SAndroid Build Coastguard WorkerContent-Disposition: attachment; filename="test%TESTNUMBER.txt"
75*6236dae4SAndroid Build Coastguard WorkerContent-Type: magic/content
76*6236dae4SAndroid Build Coastguard WorkerContent-Transfer-Encoding: 8bit
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard Workerdummy data
79*6236dae4SAndroid Build Coastguard Worker
80*6236dae4SAndroid Build Coastguard Worker------------------------------9ef8d6205763
81*6236dae4SAndroid Build Coastguard WorkerContent-Disposition: attachment; filename="test%TESTNUMBER.txt"
82*6236dae4SAndroid Build Coastguard WorkerContent-Type: text/plain
83*6236dae4SAndroid Build Coastguard WorkerX-testheader-1: header 1
84*6236dae4SAndroid Build Coastguard WorkerX-testheader-2: header 2
85*6236dae4SAndroid Build Coastguard Worker
86*6236dae4SAndroid Build Coastguard Workerdummy data
87*6236dae4SAndroid Build Coastguard Worker
88*6236dae4SAndroid Build Coastguard Worker------------------------------aaaaaaaaaaaa--
89*6236dae4SAndroid Build Coastguard Worker
90*6236dae4SAndroid Build Coastguard Worker------------------------------9ef8d6205763--
91*6236dae4SAndroid Build Coastguard Worker</protocol>
92*6236dae4SAndroid Build Coastguard Worker<stripfile>
93*6236dae4SAndroid Build Coastguard Worker# curl's default user-agent varies with version, libraries etc.
94*6236dae4SAndroid Build Coastguard Workers/(USERAGENT, \")[^\"]+/${1}stripped/
95*6236dae4SAndroid Build Coastguard Worker# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
96*6236dae4SAndroid Build Coastguard Worker# configurations - just ignore them
97*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_SSL_VERIFYPEER/
98*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
99*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_HTTP_VERSION/
100*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_INTERLEAVEDATA/
101*6236dae4SAndroid Build Coastguard Worker# CURL_DOES_CONVERSION generates an extra comment.
102*6236dae4SAndroid Build Coastguard Worker$_ = '' if /\/\* "value" \*\//
103*6236dae4SAndroid Build Coastguard Worker</stripfile>
104*6236dae4SAndroid Build Coastguard Worker<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
105*6236dae4SAndroid Build Coastguard Worker/********* Sample code generated by the curl command line tool **********
106*6236dae4SAndroid Build Coastguard Worker * All curl_easy_setopt() options are documented at:
107*6236dae4SAndroid Build Coastguard Worker * https://curl.se/libcurl/c/curl_easy_setopt.html
108*6236dae4SAndroid Build Coastguard Worker ************************************************************************/
109*6236dae4SAndroid Build Coastguard Worker#include <curl/curl.h>
110*6236dae4SAndroid Build Coastguard Worker
111*6236dae4SAndroid Build Coastguard Workerint main(int argc, char *argv[])
112*6236dae4SAndroid Build Coastguard Worker{
113*6236dae4SAndroid Build Coastguard Worker  CURLcode ret;
114*6236dae4SAndroid Build Coastguard Worker  CURL *hnd;
115*6236dae4SAndroid Build Coastguard Worker  curl_mime *mime1;
116*6236dae4SAndroid Build Coastguard Worker  curl_mimepart *part1;
117*6236dae4SAndroid Build Coastguard Worker  curl_mime *mime2;
118*6236dae4SAndroid Build Coastguard Worker  curl_mimepart *part2;
119*6236dae4SAndroid Build Coastguard Worker  struct curl_slist *slist1;
120*6236dae4SAndroid Build Coastguard Worker
121*6236dae4SAndroid Build Coastguard Worker  mime1 = NULL;
122*6236dae4SAndroid Build Coastguard Worker  mime2 = NULL;
123*6236dae4SAndroid Build Coastguard Worker  slist1 = NULL;
124*6236dae4SAndroid Build Coastguard Worker  slist1 = curl_slist_append(slist1, "X-testheader-1: header 1");
125*6236dae4SAndroid Build Coastguard Worker  slist1 = curl_slist_append(slist1, "X-testheader-2: header 2");
126*6236dae4SAndroid Build Coastguard Worker
127*6236dae4SAndroid Build Coastguard Worker  hnd = curl_easy_init();
128*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L);
129*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER");
130*6236dae4SAndroid Build Coastguard Worker  mime1 = curl_mime_init(hnd);
131*6236dae4SAndroid Build Coastguard Worker  part1 = curl_mime_addpart(mime1);
132*6236dae4SAndroid Build Coastguard Worker  curl_mime_data(part1, "value", CURL_ZERO_TERMINATED);
133*6236dae4SAndroid Build Coastguard Worker  curl_mime_name(part1, "name");
134*6236dae4SAndroid Build Coastguard Worker  part1 = curl_mime_addpart(mime1);
135*6236dae4SAndroid Build Coastguard Worker  mime2 = curl_mime_init(hnd);
136*6236dae4SAndroid Build Coastguard Worker  part2 = curl_mime_addpart(mime2);
137*6236dae4SAndroid Build Coastguard Worker  curl_mime_filedata(part2, "%LOGDIR/test%TESTNUMBER.txt");
138*6236dae4SAndroid Build Coastguard Worker  part2 = curl_mime_addpart(mime2);
139*6236dae4SAndroid Build Coastguard Worker  curl_mime_filedata(part2, "%LOGDIR/test%TESTNUMBER.txt");
140*6236dae4SAndroid Build Coastguard Worker  curl_mime_encoder(part2, "8bit");
141*6236dae4SAndroid Build Coastguard Worker  curl_mime_type(part2, "magic/content");
142*6236dae4SAndroid Build Coastguard Worker  part2 = curl_mime_addpart(mime2);
143*6236dae4SAndroid Build Coastguard Worker  curl_mime_filedata(part2, "%LOGDIR/test%TESTNUMBER.txt");
144*6236dae4SAndroid Build Coastguard Worker  curl_mime_headers(part2, slist1, 1);
145*6236dae4SAndroid Build Coastguard Worker  slist1 = NULL;
146*6236dae4SAndroid Build Coastguard Worker  curl_mime_subparts(part1, mime2);
147*6236dae4SAndroid Build Coastguard Worker  mime2 = NULL;
148*6236dae4SAndroid Build Coastguard Worker  curl_mime_name(part1, "file");
149*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime1);
150*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped");
151*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
152*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
153*6236dae4SAndroid Build Coastguard Worker%if ftp
154*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_FTP_SKIP_PASV_IP, 1L);
155*6236dae4SAndroid Build Coastguard Worker%endif
156*6236dae4SAndroid Build Coastguard Worker  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
157*6236dae4SAndroid Build Coastguard Worker
158*6236dae4SAndroid Build Coastguard Worker  /* Here is a list of options the curl code used that cannot get generated
159*6236dae4SAndroid Build Coastguard Worker     as source easily. You may choose to either not use them or implement
160*6236dae4SAndroid Build Coastguard Worker     them yourself.
161*6236dae4SAndroid Build Coastguard Worker
162*6236dae4SAndroid Build Coastguard Worker  CURLOPT_WRITEDATA was set to an object pointer
163*6236dae4SAndroid Build Coastguard Worker  CURLOPT_WRITEFUNCTION was set to a function pointer
164*6236dae4SAndroid Build Coastguard Worker  CURLOPT_READDATA was set to an object pointer
165*6236dae4SAndroid Build Coastguard Worker  CURLOPT_READFUNCTION was set to a function pointer
166*6236dae4SAndroid Build Coastguard Worker  CURLOPT_SEEKDATA was set to an object pointer
167*6236dae4SAndroid Build Coastguard Worker  CURLOPT_SEEKFUNCTION was set to a function pointer
168*6236dae4SAndroid Build Coastguard Worker  CURLOPT_ERRORBUFFER was set to an object pointer
169*6236dae4SAndroid Build Coastguard Worker  CURLOPT_STDERR was set to an object pointer
170*6236dae4SAndroid Build Coastguard Worker  CURLOPT_DEBUGFUNCTION was set to a function pointer
171*6236dae4SAndroid Build Coastguard Worker  CURLOPT_DEBUGDATA was set to an object pointer
172*6236dae4SAndroid Build Coastguard Worker  CURLOPT_HEADERFUNCTION was set to a function pointer
173*6236dae4SAndroid Build Coastguard Worker  CURLOPT_HEADERDATA was set to an object pointer
174*6236dae4SAndroid Build Coastguard Worker
175*6236dae4SAndroid Build Coastguard Worker  */
176*6236dae4SAndroid Build Coastguard Worker
177*6236dae4SAndroid Build Coastguard Worker  ret = curl_easy_perform(hnd);
178*6236dae4SAndroid Build Coastguard Worker
179*6236dae4SAndroid Build Coastguard Worker  curl_easy_cleanup(hnd);
180*6236dae4SAndroid Build Coastguard Worker  hnd = NULL;
181*6236dae4SAndroid Build Coastguard Worker  curl_mime_free(mime1);
182*6236dae4SAndroid Build Coastguard Worker  mime1 = NULL;
183*6236dae4SAndroid Build Coastguard Worker  curl_mime_free(mime2);
184*6236dae4SAndroid Build Coastguard Worker  mime2 = NULL;
185*6236dae4SAndroid Build Coastguard Worker  curl_slist_free_all(slist1);
186*6236dae4SAndroid Build Coastguard Worker  slist1 = NULL;
187*6236dae4SAndroid Build Coastguard Worker
188*6236dae4SAndroid Build Coastguard Worker  return (int)ret;
189*6236dae4SAndroid Build Coastguard Worker}
190*6236dae4SAndroid Build Coastguard Worker/**** End of sample code ****/
191*6236dae4SAndroid Build Coastguard Worker</file>
192*6236dae4SAndroid Build Coastguard Worker</verify>
193*6236dae4SAndroid Build Coastguard Worker</testcase>
194