libcurl – HTTP,ftp,ssh,telnet,ldap client API

curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos…), file transfer resume, proxy tunneling and a busload of other useful tricks.

Quote from http://curl.haxx.se/

Advantages of using libcurl:

  • curl is open source.
  • libcurl API support multiple bindings.
  • libcurl is cross platform that supports windows and *nix.
  • API doc of libcurl are easy to follow, it also provides source code examples.
  • You do not need to read up RFC to code for HTTP post or ftp client, you just need to download libcurl-dev and try it out.

    Let me show you one of the simple example source code from curl official site.

    /*****************************************************************************
     *                                  _   _ ____  _
     *  Project                     ___| | | |  _ \| |
     *                             / __| | | | |_) | |
     *                            | (__| |_| |  _ <| |___
     *                             \___|\___/|_| \_\_____|
     *
     * $Id: simple.c,v 1.6 2004/08/23 14:22:52 bagder Exp $
     */
    
    #include &lt;stdio.h&gt;
    #include &lt;curl/curl.h&gt;
    
    int main(void)
    {
      CURL *curl;
      CURLcode res;
    
      curl = curl_easy_init();
      if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
        res = curl_easy_perform(curl);
    
        /* always cleanup */
        curl_easy_cleanup(curl);
      }
      return 0;
    }
    

    Check out the libcurl tutorial and the sample source codes.

    2 thoughts on “libcurl – HTTP,ftp,ssh,telnet,ldap client API

    1. Hi,

      Now, I am able to transfer the single file (whose name is known to me) from server to client after establish the FTP connection from client to server with the help of Lib Curl. The code is as follows,
      #include
      #include
      #include
      #include

      /*
      * This is an example showing how to get a single file from an FTP server.
      * It delays the actual destination file creation until the first write
      * callback so that it won’t create an empty file in case the remote file
      * doesn’t exist or something else fails.
      */
      #define UPLOAD_FILE_AS “11.txt”
      #define REMOTE_URL “ftp://172.29.59.216/” UPLOAD_FILE_AS

      struct FtpFile
      {
      const char *filename;
      FILE *stream;
      };

      static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
      {
      struct FtpFile *out=(struct FtpFile *)stream;
      if(out && !out->stream)
      {
      /* open file for writing */
      out->stream=fopen(out->filename, “wb”);
      if(!out->stream)
      return -1; /* failure, can’t open file to write */
      }
      return fwrite(buffer, size, nmemb, out->stream);
      }

      int main(void)
      {
      CURL *curl;
      CURLcode res;
      struct FtpFile ftpfile={“11.txt”, NULL}; /* name to store the file as if succesful */
      struct curl_slist *headerlist=NULL;
      static const char buf_1 [] = “DELE ” UPLOAD_FILE_AS;
      curl_global_init(CURL_GLOBAL_DEFAULT);

      curl = curl_easy_init();

      if(curl)
      {
      /*
      * Get curl 7.9.2 from sunet.se’s FTP site. curl 7.9.2 is most likely not
      * present there by the time you read this, so you’d better replace the
      * URL with one that works!
      */

      headerlist = curl_slist_append(headerlist, buf_1);
      curl_easy_setopt(curl, CURLOPT_URL, REMOTE_URL);
      curl_easy_setopt (curl, CURLOPT_VERBOSE, 1);
      curl_easy_setopt (curl, CURLOPT_USERNAME , “gaurav”);
      curl_easy_setopt (curl, CURLOPT_PASSWORD ,”gaurav”);

      /* Define our callback to get called when there’s data to be written */
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);

      /* Set a pointer to our struct to pass to the callback */
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);

      /* Switch on full protocol/debug output */
      curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

      curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
      res = curl_easy_perform(curl);

      /* always cleanup */
      curl_easy_cleanup(curl);

      if(CURLE_OK != res)
      {
      /* we failed */
      fprintf(stderr, “curl told us %d\n”, res);
      }
      }

      if(ftpfile.stream)
      fclose(ftpfile.stream); /* close the local file */

      curl_global_cleanup();

      return 0;
      }

      But my basic aim is to transfer all the file in one stroke from server to client.
      Please help me to solve this issue.

    Leave a Reply

    Your email address will not be published. Required fields are marked *