postit2.c 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /***************************************************************************
  2. * _ _ ____ _
  3. * Project ___| | | | _ \| |
  4. * / __| | | | |_) | |
  5. * | (__| |_| | _ <| |___
  6. * \___|\___/|_| \_\_____|
  7. *
  8. * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
  9. *
  10. * This software is licensed as described in the file COPYING, which
  11. * you should have received as part of this distribution. The terms
  12. * are also available at http://curl.haxx.se/docs/copyright.html.
  13. *
  14. * You may opt to use, copy, modify, merge, publish, distribute and/or sell
  15. * copies of the Software, and permit persons to whom the Software is
  16. * furnished to do so, under the terms of the COPYING file.
  17. *
  18. * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
  19. * KIND, either express or implied.
  20. *
  21. ***************************************************************************/
  22. /* Example code that uploads a file name 'foo' to a remote script that accepts
  23. * "HTML form based" (as described in RFC1738) uploads using HTTP POST.
  24. *
  25. * The imaginary form we'll fill in looks like:
  26. *
  27. * <form method="post" enctype="multipart/form-data" action="examplepost.cgi">
  28. * Enter file: <input type="file" name="sendfile" size="40">
  29. * Enter file name: <input type="text" name="filename" size="30">
  30. * <input type="submit" value="send" name="submit">
  31. * </form>
  32. *
  33. * This exact source code has not been verified to work.
  34. */
  35. #include <stdio.h>
  36. #include <string.h>
  37. #include <curl/curl.h>
  38. int main(int argc, char *argv[])
  39. {
  40. CURL *curl;
  41. CURLcode res;
  42. struct curl_httppost *formpost=NULL;
  43. struct curl_httppost *lastptr=NULL;
  44. struct curl_slist *headerlist=NULL;
  45. static const char buf[] = "Expect:";
  46. curl_global_init(CURL_GLOBAL_ALL);
  47. /* Fill in the file upload field */
  48. curl_formadd(&formpost,
  49. &lastptr,
  50. CURLFORM_COPYNAME, "sendfile",
  51. CURLFORM_FILE, "postit2.c",
  52. CURLFORM_END);
  53. /* Fill in the filename field */
  54. curl_formadd(&formpost,
  55. &lastptr,
  56. CURLFORM_COPYNAME, "filename",
  57. CURLFORM_COPYCONTENTS, "postit2.c",
  58. CURLFORM_END);
  59. /* Fill in the submit field too, even if this is rarely needed */
  60. curl_formadd(&formpost,
  61. &lastptr,
  62. CURLFORM_COPYNAME, "submit",
  63. CURLFORM_COPYCONTENTS, "send",
  64. CURLFORM_END);
  65. curl = curl_easy_init();
  66. /* initalize custom header list (stating that Expect: 100-continue is not
  67. wanted */
  68. headerlist = curl_slist_append(headerlist, buf);
  69. if(curl) {
  70. /* what URL that receives this POST */
  71. curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/examplepost.cgi");
  72. if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )
  73. /* only disable 100-continue header if explicitly requested */
  74. curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
  75. curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
  76. res = curl_easy_perform(curl);
  77. /* always cleanup */
  78. curl_easy_cleanup(curl);
  79. /* then cleanup the formpost chain */
  80. curl_formfree(formpost);
  81. /* free slist */
  82. curl_slist_free_all (headerlist);
  83. }
  84. return 0;
  85. }