ftpgetresp.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. #include <stdio.h>
  23. #include <curl/curl.h>
  24. /*
  25. * Similar to ftpget.c but this also stores the received response-lines
  26. * in a separate file using our own callback!
  27. *
  28. * This functionality was introduced in libcurl 7.9.3.
  29. */
  30. static size_t
  31. write_response(void *ptr, size_t size, size_t nmemb, void *data)
  32. {
  33. FILE *writehere = (FILE *)data;
  34. return fwrite(ptr, size, nmemb, writehere);
  35. }
  36. int main(void)
  37. {
  38. CURL *curl;
  39. CURLcode res;
  40. FILE *ftpfile;
  41. FILE *respfile;
  42. /* local file name to store the file as */
  43. ftpfile = fopen("ftp-list", "wb"); /* b is binary, needed on win32 */
  44. /* local file name to store the FTP server's response lines in */
  45. respfile = fopen("ftp-responses", "wb"); /* b is binary, needed on win32 */
  46. curl = curl_easy_init();
  47. if(curl) {
  48. /* Get a file listing from sunet */
  49. curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/");
  50. curl_easy_setopt(curl, CURLOPT_WRITEDATA, ftpfile);
  51. /* If you intend to use this on windows with a libcurl DLL, you must use
  52. CURLOPT_WRITEFUNCTION as well */
  53. curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_response);
  54. curl_easy_setopt(curl, CURLOPT_HEADERDATA, respfile);
  55. res = curl_easy_perform(curl);
  56. /* Check for errors */
  57. if(res != CURLE_OK)
  58. fprintf(stderr, "curl_easy_perform() failed: %s\n",
  59. curl_easy_strerror(res));
  60. /* always cleanup */
  61. curl_easy_cleanup(curl);
  62. }
  63. fclose(ftpfile); /* close the local file */
  64. fclose(respfile); /* close the response file */
  65. return 0;
  66. }