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