diff options
| -rw-r--r-- | docs/examples/postit2.c | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/docs/examples/postit2.c b/docs/examples/postit2.c new file mode 100644 index 000000000..9b7cda07e --- /dev/null +++ b/docs/examples/postit2.c @@ -0,0 +1,92 @@ +/***************************************************************************** + *                                  _   _ ____  _      + *  Project                     ___| | | |  _ \| |     + *                             / __| | | | |_) | |     + *                            | (__| |_| |  _ <| |___  + *                             \___|\___/|_| \_\_____| + * + * $Id$ + * + * Example code that uploads a file name 'foo' to a remote script that accepts + * "HTML form based" (as described in RFC1738) uploads using HTTP POST. + * + * The imaginary form we'll fill in looks like: + * + * <form method="post" enctype="multipart/form-data" action="examplepost.cgi"> + * Enter file: <input type="file" name="sendfile" size="40"> + * Enter file name: <input type="text" name="filename" size="30"> + * <input type="submit" value="send" name="submit"> + * </form> + * + * This exact source code has not been verified to work. + */ + +/* to make this work under windows, use the win32-functions from the +   win32socket.c file as well */ + +#include <stdio.h> +#include <string.h> + +#include <curl/curl.h> +#include <curl/types.h> +#include <curl/easy.h> + +#if LIBCURL_VERSION_NUM < 0x070900 +#error "curl_formadd() is not introduced until libcurl 7.9 and later" +#endif + +int main(int argc, char *argv[]) +{ +  CURL *curl; +  CURLcode res; + +  struct HttpPost *formpost=NULL; +  struct HttpPost *lastptr=NULL; +  struct curl_slist *headerlist=NULL; +  char buf[] = "Expect:"; + +  /* Fill in the file upload field */ +  curl_formadd(&formpost, +               &lastptr, +               CURLFORM_COPYNAME, "sendfile", +               CURLFORM_FILE, "postit2.c", +               CURLFORM_END); + +  /* Fill in the filename field */ +  curl_formadd(&formpost, +               &lastptr, +               CURLFORM_COPYNAME, "filename", +               CURLFORM_COPYCONTENTS, "postit2.c", +               CURLFORM_END); +   + +  /* Fill in the submit field too, even if this is rarely needed */ +  curl_formadd(&formpost, +               &lastptr, +               CURLFORM_COPYNAME, "submit", +               CURLFORM_COPYCONTENTS, "send", +               CURLFORM_END); + +  curl = curl_easy_init(); +  /* initalize custom header list (stating that Expect: 100-continue is not +     wanted */ +  headerlist = curl_slist_append(headerlist, buf); +  if(curl) { +    /* what URL that receives this POST */ +    curl_easy_setopt(curl, CURLOPT_URL, "http://curl.haxx.se/examplepost.cgi"); +    if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) ) +      /* only disable 100-continue header if explicitly requested */ +      curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); +    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); +    res = curl_easy_perform(curl); + +    /* always cleanup */ +    curl_easy_cleanup(curl); + +    /* then cleanup the formpost chain */ +    curl_formfree(formpost); +    /* free slist */ +    curl_slist_free_all (headerlist); +  } +  return 0; +} | 
