Home | History | Annotate | Download | only in data
      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 three files, one with explicit type
     31  </name>
     32  <command>
     33 http://%HOSTIP:%HTTPPORT/we/want/1404 -F name=value -F 'file=@log/test1404.txt,log/test1404.txt;type=magic/content,log/test1404.txt' --libcurl log/test1404.c
     34 </command>
     35 # We create this file before the command is invoked!
     36 <file name="log/test1404.txt">
     37 dummy data
     38 </file>
     39 </client>
     40 
     41 # Verify data after the test has been "shot"
     42 <verify>
     43 <strip>
     44 (^User-Agent:.*|-----+\w+)
     45 </strip>
     46 <protocol>
     47 POST /we/want/1404 HTTP/1.1
     48 User-Agent: curl/7.18.2 (i686-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.7a ipv6 zlib/1.1.4
     49 Host: %HOSTIP:%HTTPPORT
     50 Accept: */*
     51 Content-Length: 795
     52 Expect: 100-continue
     53 Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
     54 
     55 ------------------------------9ef8d6205763
     56 Content-Disposition: form-data; name="name"
     57 
     58 value
     59 ------------------------------9ef8d6205763
     60 Content-Disposition: form-data; name="file"
     61 Content-Type: multipart/mixed; boundary=----------------------------aaaaaaaaaaaa
     62 
     63 Content-Disposition: attachment; filename="test1404.txt"
     64 Content-Type: text/plain
     65 
     66 dummy data
     67 
     68 ------------------------------9ef8d6205763
     69 Content-Disposition: attachment; filename="test1404.txt"
     70 Content-Type: magic/content
     71 
     72 dummy data
     73 
     74 ------------------------------9ef8d6205763
     75 Content-Disposition: attachment; filename="test1404.txt"
     76 Content-Type: text/plain
     77 
     78 dummy data
     79 
     80 ------------------------------aaaaaaaaaaaa--
     81 ------------------------------9ef8d6205763--
     82 </protocol>
     83 <stripfile>
     84 # curl's default user-agent varies with version, libraries etc.
     85 s/(USERAGENT, \")[^\"]+/${1}stripped/
     86 # CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
     87 # ignore them
     88 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
     89 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
     90 </stripfile>
     91 <file name="log/test1404.c" mode="text">
     92 /********* Sample code generated by the curl command line tool **********
     93  * All curl_easy_setopt() options are documented at:
     94  * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
     95  ************************************************************************/
     96 #include <curl/curl.h>
     97 
     98 int main(int argc, char *argv[])
     99 {
    100   CURLcode ret;
    101   CURL *hnd;
    102   struct curl_httppost *post1;
    103   struct curl_httppost *postend;
    104 
    105   post1 = NULL;
    106   postend = NULL;
    107   curl_formadd(&post1, &postend,
    108                CURLFORM_COPYNAME, "name",
    109                CURLFORM_COPYCONTENTS, "value",
    110                CURLFORM_END);
    111   curl_formadd(&post1, &postend,
    112                CURLFORM_COPYNAME, "file",
    113                CURLFORM_FILE, "log/test1404.txt",
    114                CURLFORM_CONTENTTYPE, "text/plain",
    115                CURLFORM_FILE, "log/test1404.txt",
    116                CURLFORM_CONTENTTYPE, "magic/content",
    117                CURLFORM_FILE, "log/test1404.txt",
    118                CURLFORM_CONTENTTYPE, "text/plain",
    119                CURLFORM_END);
    120 
    121   hnd = curl_easy_init();
    122   curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1404");
    123   curl_easy_setopt(hnd, CURLOPT_HEADER, 1L);
    124   curl_easy_setopt(hnd, CURLOPT_HTTPPOST, post1);
    125   curl_easy_setopt(hnd, CURLOPT_USERAGENT, "stripped");
    126   curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
    127   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
    128   curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
    129 
    130   /* Here is a list of options the curl code used that cannot get generated
    131      as source easily. You may select to either not use them or implement
    132      them yourself.
    133 
    134   CURLOPT_WRITEDATA set to a objectpointer
    135   CURLOPT_WRITEFUNCTION set to a functionpointer
    136   CURLOPT_READDATA set to a objectpointer
    137   CURLOPT_READFUNCTION set to a functionpointer
    138   CURLOPT_SEEKDATA set to a objectpointer
    139   CURLOPT_SEEKFUNCTION set to a functionpointer
    140   CURLOPT_ERRORBUFFER set to a objectpointer
    141   CURLOPT_STDERR set to a objectpointer
    142   CURLOPT_DEBUGFUNCTION set to a functionpointer
    143   CURLOPT_DEBUGDATA set to a objectpointer
    144   CURLOPT_HEADERFUNCTION set to a functionpointer
    145   CURLOPT_HEADERDATA set to a objectpointer
    146 
    147   */
    148 
    149   ret = curl_easy_perform(hnd);
    150 
    151   curl_easy_cleanup(hnd);
    152   hnd = NULL;
    153   curl_formfree(post1);
    154   post1 = NULL;
    155 
    156   return (int)ret;
    157 }
    158 /**** End of sample code ****/
    159 </file>
    160 </verify>
    161 </testcase>
    162